forked from qt-creator/qt-creator
Nicer implementation of ::completeScope()
This commit is contained in:
@@ -775,42 +775,23 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
|
||||
bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &results,
|
||||
const LookupContext &context)
|
||||
{
|
||||
if (results.isEmpty())
|
||||
return false; // nothing to do.
|
||||
QList<Symbol *> classes, namespaces;
|
||||
|
||||
// Search for a class or a namespace.
|
||||
TypeOfExpression::Result result;
|
||||
foreach (result, results) {
|
||||
foreach (TypeOfExpression::Result result, results) {
|
||||
FullySpecifiedType ty = result.first;
|
||||
|
||||
if (ty->isClassType() || ty->isNamespaceType())
|
||||
break;
|
||||
if (Class *classTy = ty->asClassType())
|
||||
classes.append(classTy);
|
||||
|
||||
else if (Namespace *namespaceTy = ty->asNamespaceType())
|
||||
namespaces.append(namespaceTy);
|
||||
}
|
||||
|
||||
FullySpecifiedType exprTy = result.first;
|
||||
if (! exprTy) {
|
||||
return false;
|
||||
} else if (exprTy->isNamespaceType()) {
|
||||
QList<Symbol *> candidates;
|
||||
foreach (TypeOfExpression::Result p, results) {
|
||||
if (Namespace *ns = p.first->asNamespaceType())
|
||||
candidates.append(ns);
|
||||
}
|
||||
completeNamespace(candidates, context);
|
||||
} else if (exprTy->isClassType()) {
|
||||
QList<Symbol *> candidates;
|
||||
foreach (TypeOfExpression::Result p, results) {
|
||||
if (Class *k = p.first->asClassType())
|
||||
candidates.append(k);
|
||||
}
|
||||
completeClass(candidates, context);
|
||||
} else if (Symbol *symbol = result.second) {
|
||||
if (symbol->isTypedef()) {
|
||||
ResolveClass resolveClass;
|
||||
const QList<Symbol *> candidates = resolveClass(result, context);
|
||||
completeClass(candidates, context);
|
||||
}
|
||||
}
|
||||
if (! classes.isEmpty())
|
||||
completeClass(classes, context);
|
||||
|
||||
else if (! namespaces.isEmpty() && m_completions.isEmpty())
|
||||
completeNamespace(namespaces, context);
|
||||
|
||||
return ! m_completions.isEmpty();
|
||||
}
|
||||
|
Reference in New Issue
Block a user