diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-10-02 10:28:05 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-10-05 17:55:02 +0200 |
commit | b43f279227e7eb074f68f2222a908c568b1e749e (patch) | |
tree | fa6e4317d14332e1ef22c85362425f64e26b5c1d /src/libs/cplusplus/CheckUndefinedSymbols.cpp | |
parent | 10f94d679f04c69069d6a86146139218360e7c0f (diff) | |
download | qt-creator-b43f279227e7eb074f68f2222a908c568b1e749e.tar.gz |
Fixed type checking for type definitions inside an @implementation
Diffstat (limited to 'src/libs/cplusplus/CheckUndefinedSymbols.cpp')
-rw-r--r-- | src/libs/cplusplus/CheckUndefinedSymbols.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp index ca43b1fb3d..febb19e272 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp +++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp @@ -135,18 +135,24 @@ void CheckUndefinedSymbols::buildTypeMap(Class *klass) addType(klass->name()); for (unsigned i = 0; i < klass->memberCount(); ++i) { - Symbol *member = klass->memberAt(i); - - if (Class *klass = member->asClass()) { - buildTypeMap(klass); - } else if (Enum *e = member->asEnum()) { - addType(e->name()); - } else if (ForwardClassDeclaration *fwd = member->asForwardClassDeclaration()) { - addType(fwd->name()); - } else if (Declaration *decl = member->asDeclaration()) { - if (decl->isTypedef()) - addType(decl->name()); - } + buildMemberTypeMap(klass->memberAt(i)); + } +} + +void CheckUndefinedSymbols::buildMemberTypeMap(Symbol *member) +{ + if (member == 0) + return; + + if (Class *klass = member->asClass()) { + buildTypeMap(klass); + } else if (Enum *e = member->asEnum()) { + addType(e->name()); + } else if (ForwardClassDeclaration *fwd = member->asForwardClassDeclaration()) { + addType(fwd->name()); + } else if (Declaration *decl = member->asDeclaration()) { + if (decl->isTypedef()) + addType(decl->name()); } } @@ -176,10 +182,16 @@ void CheckUndefinedSymbols::buildTypeMap(NamespaceBinding *binding, QSet<Namespa addType(fKlass->name()); } else if (ObjCClass *klass = member->asObjCClass()) { addType(klass->name()); + + for (unsigned i = 0; i < klass->memberCount(); ++i) + buildMemberTypeMap(klass->memberAt(i)); } else if (ObjCForwardProtocolDeclaration *fProto = member->asObjCForwardProtocolDeclaration()) { addType(fProto->name()); } else if (ObjCProtocol *proto = member->asObjCProtocol()) { addType(proto->name()); + + for (unsigned i = 0; i < proto->memberCount(); ++i) + buildMemberTypeMap(proto->memberAt(i)); } } } |