summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-01-10 17:54:59 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-01-11 09:29:38 +0100
commit2dc221d76d98315ef860835f23391be5125d4244 (patch)
tree3a595062958910a5185d4f625b0d5445a7e05850 /src/libs/cplusplus
parent0c17d538759872ba7d35e468ffe55d813b5e9178 (diff)
downloadqt-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.cpp16
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()) {