From 0ef213dfdd33b32cd7009d6d8c031620954de359 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 18 Feb 2009 15:56:59 +0100 Subject: Nicer implementation of ::completeScope() --- src/plugins/cpptools/cppcodecompletion.cpp | 43 +++++++++--------------------- 1 file changed, 12 insertions(+), 31 deletions(-) (limited to 'src/plugins/cpptools/cppcodecompletion.cpp') diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 6132dadf31..ccdb01d648 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -775,43 +775,24 @@ 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); - 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); - } + else if (Namespace *namespaceTy = ty->asNamespaceType()) + namespaces.append(namespaceTy); } + if (! classes.isEmpty()) + completeClass(classes, context); + + else if (! namespaces.isEmpty() && m_completions.isEmpty()) + completeNamespace(namespaces, context); + return ! m_completions.isEmpty(); } -- cgit v1.2.1