C++11: Correct scoping for scoped enums.

Fixes completion, highlighting and find usages.

Change-Id: I1ea12c6a9c7a4f8ba0f9d55e31d6b7986233e7d8
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Christian Kamm
2012-10-25 07:56:01 +02:00
committed by hjk
parent c55620000c
commit 19e03b186a
6 changed files with 52 additions and 25 deletions

View File

@@ -1407,10 +1407,10 @@ void CppCompletionAssistProcessor::globalCompletion(CPlusPlus::Scope *currentSco
const QList<Symbol *> symbols = currentBinding->symbols();
if (! symbols.isEmpty()) {
if (symbols.first()->isNamespace())
completeNamespace(currentBinding);
else
if (symbols.first()->isClass())
completeClass(currentBinding);
else
completeNamespace(currentBinding);
}
}
@@ -1480,6 +1480,12 @@ bool CppCompletionAssistProcessor::completeScope(const QList<CPlusPlus::LookupIt
completeClass(b);
break;
}
} else if (Enum *e = ty->asEnumType()) {
if (ClassOrNamespace *b = context.lookupType(e)) {
completeNamespace(b);
break;
}
}
}
@@ -1504,11 +1510,11 @@ void CppCompletionAssistProcessor::completeNamespace(CPlusPlus::ClassOrNamespace
QSet<Scope *> scopesVisited;
foreach (Symbol *bb, binding->symbols()) {
if (Namespace *ns = bb->asNamespace())
scopesToVisit.append(ns);
if (Scope *scope = bb->asScope())
scopesToVisit.append(scope);
}
foreach (Enum *e, binding->enums()) {
foreach (Enum *e, binding->unscopedEnums()) {
scopesToVisit.append(e);
}
@@ -1549,7 +1555,7 @@ void CppCompletionAssistProcessor::completeClass(CPlusPlus::ClassOrNamespace *b,
scopesToVisit.append(k);
}
foreach (Enum *e, binding->enums())
foreach (Enum *e, binding->unscopedEnums())
scopesToVisit.append(e);
while (! scopesToVisit.isEmpty()) {