forked from qt-creator/qt-creator
Fixed lookup of qualified name ids.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user