diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 2941489e01c..01d4e13b4eb 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -162,8 +162,26 @@ QList LookupContext::resolve(Name *name, const QList &visible if (QualifiedNameId *q = name->asQualifiedNameId()) { QList candidates; QList scopes = visibleScopes; - Identifier *id = identifier(name); + for (unsigned i = 0; i < q->nameCount(); ++i) { + Name *name = q->nameAt(i); + if (i + 1 == q->nameCount()) + candidates = resolve(name, scopes, mode); + else + candidates = resolveClassOrNamespace(name, scopes); + + if (candidates.isEmpty() || i + 1 == q->nameCount()) + break; + + scopes.clear(); + foreach (Symbol *candidate, candidates) { + if (ScopedSymbol *scoped = candidate->asScopedSymbol()) { + expand(scoped->members(), visibleScopes, &scopes); + } + } + } + + Identifier *id = identifier(name); foreach (Scope *scope, visibleScopes) { Symbol *symbol = scope->lookat(id); for (; symbol; symbol = symbol->next()) { @@ -189,26 +207,7 @@ QList LookupContext::resolve(Name *name, const QList &visible } } - for (unsigned i = 0; i < q->nameCount(); ++i) { - Name *name = q->nameAt(i); - - if (i + 1 == q->nameCount()) - candidates += resolve(name, scopes, mode); - else - candidates += resolveClassOrNamespace(name, scopes); - - if (candidates.isEmpty() || i + 1 == q->nameCount()) - return candidates; - - scopes.clear(); - foreach (Symbol *candidate, candidates) { - if (ScopedSymbol *scoped = candidate->asScopedSymbol()) { - expand(scoped->members(), visibleScopes, &scopes); - } - } - } - - return QList(); + return candidates; } QList candidates;