summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-02-18 15:56:59 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-02-18 16:02:01 +0100
commit0ef213dfdd33b32cd7009d6d8c031620954de359 (patch)
tree0f278e9a7b2887ec82d6b55f89b407fbc3144f07 /src/plugins/cpptools/cppcodecompletion.cpp
parentc72c84d8375692b1cf1ad5c9ba3594f3727f9c02 (diff)
downloadqt-creator-0ef213dfdd33b32cd7009d6d8c031620954de359.tar.gz
Nicer implementation of ::completeScope()
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp43
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();
}