summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2009-01-24 23:07:42 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2009-01-24 23:07:42 +0100
commita90545126fb63ed05fc559d50dbbb215dcd3f25e (patch)
tree32aa9eec68bc2214bd51052e043188c93a2f87ac
parent926fc06266565fee619c106e8187006a68a7a03d (diff)
downloadqt-creator-a90545126fb63ed05fc559d50dbbb215dcd3f25e.tar.gz
Fixes: Lookup of qualified name ids.
-rw-r--r--src/libs/cplusplus/LookupContext.cpp41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 2941489e01..01d4e13b4e 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -162,8 +162,26 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
if (QualifiedNameId *q = name->asQualifiedNameId()) {
QList<Symbol *> candidates;
QList<Scope *> 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<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &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<Symbol *>();
+ return candidates;
}
QList<Symbol *> candidates;