summaryrefslogtreecommitdiff
path: root/cpp/src/slice2swift/SwiftUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2swift/SwiftUtil.cpp')
-rw-r--r--cpp/src/slice2swift/SwiftUtil.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/cpp/src/slice2swift/SwiftUtil.cpp b/cpp/src/slice2swift/SwiftUtil.cpp
index e5e6c98030c..d9a733ad028 100644
--- a/cpp/src/slice2swift/SwiftUtil.cpp
+++ b/cpp/src/slice2swift/SwiftUtil.cpp
@@ -658,20 +658,35 @@ SwiftGenerator::containsClassMembers(const StructPtr& s)
DataMemberList dm = s->dataMembers();
for(DataMemberList::const_iterator i = dm.begin(); i != dm.end(); ++i)
{
- BuiltinPtr builtin = BuiltinPtr::dynamicCast((*i)->type());
-
- if(builtin && (builtin->kind() == Builtin::KindObject ||
- builtin->kind() == Builtin::KindValue))
+ if(isClassType((*i)->type()))
{
return true;
}
- else if(ClassDefPtr::dynamicCast((*i)->type()))
+
+ StructPtr st = StructPtr::dynamicCast((*i)->type());
+ if(st && containsClassMembers(st))
{
return true;
}
- else if(StructPtr::dynamicCast((*i)->type()) && containsClassMembers(StructPtr::dynamicCast((*i)->type())))
+
+ SequencePtr seq = SequencePtr::dynamicCast((*i)->type());
+ if(seq)
{
- return true;
+ st = StructPtr::dynamicCast(seq->type());
+ if(isClassType(seq->type()) || (st && containsClassMembers(st)))
+ {
+ return true;
+ }
+ }
+
+ DictionaryPtr dict = DictionaryPtr::dynamicCast((*i)->type());
+ if(dict)
+ {
+ st = StructPtr::dynamicCast(dict->valueType());
+ if(isClassType(dict->valueType()) || (st && containsClassMembers(st)))
+ {
+ return true;
+ }
}
}
return false;