diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-01-10 17:54:59 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-01-11 09:29:38 +0100 |
commit | 2dc221d76d98315ef860835f23391be5125d4244 (patch) | |
tree | 3a595062958910a5185d4f625b0d5445a7e05850 /src/libs/cplusplus | |
parent | 0c17d538759872ba7d35e468ffe55d813b5e9178 (diff) | |
download | qt-creator-2dc221d76d98315ef860835f23391be5125d4244.tar.gz |
Prefer ObjC classes/protocols when searching for a canonical symbol.
Diffstat (limited to 'src/libs/cplusplus')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 9e81af2ac1..1d8811173b 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -727,6 +727,8 @@ Symbol *LookupContext::canonicalSymbol(Symbol *symbol) { Symbol *canonical = symbol; Class *canonicalClass = 0; + ObjCClass *canonicalObjCClass = 0; + ObjCProtocol *canonicalObjCProto = 0; for (; symbol; symbol = symbol->next()) { if (symbol->identifier() == canonical->identifier()) { @@ -734,6 +736,10 @@ Symbol *LookupContext::canonicalSymbol(Symbol *symbol) if (Class *klass = symbol->asClass()) canonicalClass = klass; + else if (ObjCClass *clazz = symbol->asObjCClass()) + canonicalObjCClass = clazz; + else if (ObjCProtocol *proto = symbol->asObjCProtocol()) + canonicalObjCProto = proto; } } @@ -742,6 +748,16 @@ Symbol *LookupContext::canonicalSymbol(Symbol *symbol) if (canonical->isForwardClassDeclaration()) return canonicalClass; // prefer class declarations when available. + } else if (canonicalObjCClass) { + Q_ASSERT(canonical != 0); + + if (canonical->isObjCForwardClassDeclaration()) + return canonicalObjCClass; + } else if (canonicalObjCProto) { + Q_ASSERT(canonical != 0); + + if (canonical->isObjCForwardProtocolDeclaration()) + return canonicalObjCProto; } if (canonical && canonical->scope()->isClassScope()) { |