diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 6132dadf31b..ccdb01d6489 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -775,42 +775,23 @@ bool CppCodeCompletion::completeMember(const QList &re bool CppCodeCompletion::completeScope(const QList &results, const LookupContext &context) { - if (results.isEmpty()) - return false; // nothing to do. + QList 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 candidates; - foreach (TypeOfExpression::Result p, results) { - if (Namespace *ns = p.first->asNamespaceType()) - candidates.append(ns); - } - completeNamespace(candidates, context); - } else if (exprTy->isClassType()) { - QList 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 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(); }