diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 410e1fac786979f42977b3fa67713fa2e555a645..e04ee2a1b80c8524402d01977e90061c4d4dda29 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -132,63 +132,65 @@ QList<Symbol *> LookupContext::resolveQualifiedNameId(QualifiedNameId *q, { QList<Symbol *> candidates; - for (int i = 0; i < visibleScopes.size(); ++i) { - Scope *scope = visibleScopes.at(i); + if (true || mode & ResolveClass) { + for (int i = 0; i < visibleScopes.size(); ++i) { + Scope *scope = visibleScopes.at(i); - for (Symbol *symbol = scope->lookat(q); symbol; symbol = symbol->next()) { - if (! symbol->name()) - continue; + for (Symbol *symbol = scope->lookat(q); symbol; symbol = symbol->next()) { + if (! symbol->name()) + continue; + else if (! symbol->isClass()) + continue; - QualifiedNameId *qq = symbol->name()->asQualifiedNameId(); + QualifiedNameId *qq = symbol->name()->asQualifiedNameId(); - if (! qq) - continue; - else if (! maybeValidSymbol(symbol, mode, candidates)) - continue; + if (! qq) + continue; + else if (! maybeValidSymbol(symbol, mode, candidates)) + continue; - if (! q->unqualifiedNameId()->isEqualTo(qq->unqualifiedNameId())) - continue; + if (! q->unqualifiedNameId()->isEqualTo(qq->unqualifiedNameId())) + continue; - else if (qq->nameCount() == q->nameCount()) { - unsigned j = 0; + else if (qq->nameCount() == q->nameCount()) { + unsigned j = 0; - for (; j < q->nameCount(); ++j) { - Name *classOrNamespaceName1 = q->nameAt(j); - Name *classOrNamespaceName2 = qq->nameAt(j); + for (; j < q->nameCount(); ++j) { + Name *classOrNamespaceName1 = q->nameAt(j); + Name *classOrNamespaceName2 = qq->nameAt(j); - if (! classOrNamespaceName1->isEqualTo(classOrNamespaceName2)) - break; - } + if (! classOrNamespaceName1->isEqualTo(classOrNamespaceName2)) + break; + } - if (j == q->nameCount()) - candidates.append(symbol); + if (j == q->nameCount()) + candidates.append(symbol); + } } } } - if (candidates.isEmpty()) { - QList<Scope *> scopes; + QList<Scope *> scopes; - if (q->nameCount() == 1) - scopes = visibleScopes; // ### handle global scope lookup - else - scopes = resolveNestedNameSpecifier(q, visibleScopes); + if (q->nameCount() == 1) + scopes = visibleScopes; // ### handle global scope lookup + else + scopes = resolveNestedNameSpecifier(q, visibleScopes); - QList<Scope *> expanded; - foreach (Scope *scope, scopes) { - expanded.append(scope); + QList<Scope *> expanded; + foreach (Scope *scope, scopes) { + expanded.append(scope); - for (unsigned i = 0; i < scope->symbolCount(); ++i) { - Symbol *member = scope->symbolAt(i); + for (unsigned i = 0; i < scope->symbolCount(); ++i) { + Symbol *member = scope->symbolAt(i); - if (ScopedSymbol *scopedSymbol = member->asScopedSymbol()) - expandEnumOrAnonymousSymbol(scopedSymbol, &expanded); - } + if (ScopedSymbol *scopedSymbol = member->asScopedSymbol()) + expandEnumOrAnonymousSymbol(scopedSymbol, &expanded); } - - candidates += resolve(q->unqualifiedNameId(), expanded, mode); } + candidates += resolve(q->unqualifiedNameId(), expanded, mode); + return candidates; }