From f6f0c81021f16c31f014ab5d43bc2dab2702ce3e Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 30 Dec 2008 11:35:30 +0100 Subject: Improved CppCodeCompletion::completeScope(). Added simple support for typedefs. --- src/plugins/cpptools/cppcodecompletion.cpp | 33 +++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/plugins/cpptools/cppcodecompletion.cpp') 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 &resolvedTypes, +bool CppCodeCompletion::completeScope(const QList &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 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 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 candidates = symbolsForDotAccess(result, + context); + completeClass(candidates, context); + } } return ! m_completions.isEmpty(); -- cgit v1.2.1