From 3644f17be80ba9a7d0b134d9c06403d667a3eaee Mon Sep 17 00:00:00 2001 From: Jose Date: Mon, 1 Apr 2019 18:10:31 +0200 Subject: Fixes for check if a structure type contains class members --- cpp/src/slice2swift/SwiftUtil.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'cpp/src/slice2swift/SwiftUtil.cpp') 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; -- cgit v1.2.3