diff options
| author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-02-18 15:56:59 +0100 |
|---|---|---|
| committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-02-18 16:02:01 +0100 |
| commit | 0ef213dfdd33b32cd7009d6d8c031620954de359 (patch) | |
| tree | 0f278e9a7b2887ec82d6b55f89b407fbc3144f07 /src/plugins/cpptools/cppcodecompletion.cpp | |
| parent | c72c84d8375692b1cf1ad5c9ba3594f3727f9c02 (diff) | |
| download | qt-creator-0ef213dfdd33b32cd7009d6d8c031620954de359.tar.gz | |
Nicer implementation of ::completeScope()
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
| -rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 43 |
1 files changed, 12 insertions, 31 deletions
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<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); - 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); - } + 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(); } |
