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,
|
bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &results,
|
||||||
const LookupContext &context)
|
const LookupContext &context)
|
||||||
{
|
{
|
||||||
if (results.isEmpty())
|
QList<Symbol *> classes, namespaces;
|
||||||
return false; // nothing to do.
|
|
||||||
|
|
||||||
// Search for a class or a namespace.
|
foreach (TypeOfExpression::Result result, results) {
|
||||||
TypeOfExpression::Result result;
|
|
||||||
foreach (result, results) {
|
|
||||||
FullySpecifiedType ty = result.first;
|
FullySpecifiedType ty = result.first;
|
||||||
|
|
||||||
if (ty->isClassType() || ty->isNamespaceType())
|
if (Class *classTy = ty->asClassType())
|
||||||
break;
|
classes.append(classTy);
|
||||||
|
|
||||||
|
else if (Namespace *namespaceTy = ty->asNamespaceType())
|
||||||
|
namespaces.append(namespaceTy);
|
||||||
}
|
}
|
||||||
|
|
||||||
FullySpecifiedType exprTy = result.first;
|
if (! classes.isEmpty())
|
||||||
if (! exprTy) {
|
completeClass(classes, context);
|
||||||
return false;
|
|
||||||
} else if (exprTy->isNamespaceType()) {
|
else if (! namespaces.isEmpty() && m_completions.isEmpty())
|
||||||
QList<Symbol *> candidates;
|
completeNamespace(namespaces, context);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ! m_completions.isEmpty();
|
return ! m_completions.isEmpty();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user