From 2dc221d76d98315ef860835f23391be5125d4244 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen <erik.verbruggen@nokia.com> Date: Sun, 10 Jan 2010 17:54:59 +0100 Subject: [PATCH] Prefer ObjC classes/protocols when searching for a canonical symbol. --- src/libs/cplusplus/LookupContext.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 9e81af2ac1c..1d8811173b1 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()) { -- GitLab