summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CheckUndefinedSymbols.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-10-02 10:28:05 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-10-05 17:55:02 +0200
commitb43f279227e7eb074f68f2222a908c568b1e749e (patch)
treefa6e4317d14332e1ef22c85362425f64e26b5c1d /src/libs/cplusplus/CheckUndefinedSymbols.cpp
parent10f94d679f04c69069d6a86146139218360e7c0f (diff)
downloadqt-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.cpp36
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));
}
}
}