diff options
author | Roberto Raggi <qtc-committer@nokia.com> | 2008-12-30 11:35:30 +0100 |
---|---|---|
committer | Roberto Raggi <qtc-committer@nokia.com> | 2008-12-30 11:35:30 +0100 |
commit | f6f0c81021f16c31f014ab5d43bc2dab2702ce3e (patch) | |
tree | 9e45c656180ad75986a3440063408e019ac8a54e /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | 702e078ace5b8e091da1e02ea240c42222b2c002 (diff) | |
download | qt-creator-f6f0c81021f16c31f014ab5d43bc2dab2702ce3e.tar.gz |
Improved CppCodeCompletion::completeScope(). Added simple support for typedefs.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 075a55b96e..947bea8f6f 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -515,7 +515,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) } if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) && completeMember(exprTy, resolvedTypes, context)) { return m_startPosition; - } else if (m_completionOperator == T_COLON_COLON && completeScope(exprTy, resolvedTypes, context)) { + } else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) { return m_startPosition; } else if (m_completionOperator == T_SIGNAL && completeSignal(exprTy, resolvedTypes, context)) { return m_startPosition; @@ -682,32 +682,45 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType, return false; } -bool CppCodeCompletion::completeScope(FullySpecifiedType exprTy, - const QList<TypeOfExpression::Result> &resolvedTypes, +bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &results, const LookupContext &context) { + if (results.isEmpty()) + return false; // nothing to do. + // Search for a class or a namespace. - foreach (TypeOfExpression::Result p, resolvedTypes) { - if (p.first->isClass() || p.first->isNamespace()) { - exprTy = p.first; + TypeOfExpression::Result result(FullySpecifiedType(), 0); + foreach (result, results) { + FullySpecifiedType ty = result.first; + + if (ty->isClass() || ty->isNamespace()) break; - } } - if (exprTy->asNamespace()) { + FullySpecifiedType exprTy = result.first; + if (! exprTy) { + return false; + } else if (exprTy->asNamespace()) { QList<Symbol *> candidates; - foreach (TypeOfExpression::Result p, resolvedTypes) { + foreach (TypeOfExpression::Result p, results) { if (Namespace *ns = p.first->asNamespace()) candidates.append(ns); } completeNamespace(candidates, context); } else if (exprTy->isClass()) { QList<Symbol *> candidates; - foreach (TypeOfExpression::Result p, resolvedTypes) { + foreach (TypeOfExpression::Result p, results) { if (Class *k = p.first->asClass()) candidates.append(k); } completeClass(candidates, context); + } else if (Symbol *symbol = result.second) { + if (symbol->isTypedef()) { + SymbolsForDotAccess symbolsForDotAccess; + const QList<Symbol *> candidates = symbolsForDotAccess(result, + context); + completeClass(candidates, context); + } } return ! m_completions.isEmpty(); |