diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 7ddb9e4bd33fc4ce1b243fd23f2d54fb501697e9..40e87760b931d00c7c493266650d23b67be8718f 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -105,7 +105,7 @@ Scope *TypeOfExpression::scope() const return m_scope; } -const LookupContext &TypeOfExpression::lookupContext() const +const LookupContext &TypeOfExpression::context() const { return m_lookupContext; } diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h index 28bd1db08f37ffe1e1f36198c19d344647d0c692..9d32e57f8e05005f46aa05705b6cf48c917cf067 100644 --- a/src/libs/cplusplus/TypeOfExpression.h +++ b/src/libs/cplusplus/TypeOfExpression.h @@ -92,7 +92,7 @@ public: /** * Returns the lookup context of the last evaluated expression. */ - const LookupContext &lookupContext() const; + const LookupContext &context() const; Scope *scope() const; ExpressionAST *expressionAST() const; diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 526aef780c881a9ff8d222889baffb6f6321534d..5dfe85579cf2fc4e71ef690dc8ea62af533f38dc 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -769,8 +769,6 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, if (debug) qDebug() << "got:" << results.size() << "results"; - LookupContext context = typeOfExpression.lookupContext(); - if (results.isEmpty()) { if (m_completionOperator == T_SIGNAL || m_completionOperator == T_SLOT) { if (! (expression.isEmpty() || expression == QLatin1String("this"))) { @@ -781,8 +779,6 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, if (results.isEmpty()) return -1; - context = typeOfExpression.lookupContext(); - } else if (m_completionOperator == T_LPAREN) { // Find the expression that precedes the current name int index = endOfExpression; @@ -804,7 +800,7 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, // If it's a class, add completions for the constructors foreach (const LookupItem &result, results) { if (result.type()->isClassType()) { - if (completeConstructorOrFunction(results, context, endOfExpression, true)) + if (completeConstructorOrFunction(results, endOfExpression, true)) return m_startPosition; break; @@ -821,28 +817,28 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, switch (m_completionOperator) { case T_LPAREN: - if (completeConstructorOrFunction(results, context, endOfExpression, false)) + if (completeConstructorOrFunction(results, endOfExpression, false)) return m_startPosition; break; case T_DOT: case T_ARROW: - if (completeMember(results, context)) + if (completeMember(results)) return m_startPosition; break; case T_COLON_COLON: - if (completeScope(results, context)) + if (completeScope(results)) return m_startPosition; break; case T_SIGNAL: - if (completeSignal(results, context)) + if (completeSignal(results)) return m_startPosition; break; case T_SLOT: - if (completeSlot(results, context)) + if (completeSlot(results)) return m_startPosition; break; @@ -877,9 +873,9 @@ int CppCodeCompletion::globalCompletion(Symbol *lastVisibleSymbol, } bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &results, - const LookupContext &context, int endOfExpression, bool toolTipOnly) { + const LookupContext &context = typeOfExpression.context(); QList<Function *> functions; foreach (const LookupItem &result, results) { @@ -1054,16 +1050,17 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r m_functionArgumentWidget = new FunctionArgumentWidget; m_functionArgumentWidget->showFunctionHint(functions, - typeOfExpression.lookupContext(), + typeOfExpression.context(), m_startPosition); } return false; } -bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults, - const LookupContext &context) +bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults) { + const LookupContext &context = typeOfExpression.context(); + if (debug) qDebug() << Q_FUNC_INFO << __LINE__; @@ -1089,7 +1086,7 @@ bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults, } if (binding) - completeClass(binding, context, /*static lookup = */ false); + completeClass(binding, /*static lookup = */ false); return ! m_completions.isEmpty(); } @@ -1102,9 +1099,9 @@ bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults, return false; } -bool CppCodeCompletion::completeScope(const QList<LookupItem> &results, - const LookupContext &context) +bool CppCodeCompletion::completeScope(const QList<LookupItem> &results) { + const LookupContext &context = typeOfExpression.context(); if (results.isEmpty()) return false; @@ -1114,19 +1111,19 @@ bool CppCodeCompletion::completeScope(const QList<LookupItem> &results, if (NamedType *namedTy = ty->asNamedType()) { if (ClassOrNamespace *b = context.lookupType(namedTy->name(), scope)) { - completeClass(b, context); + completeClass(b); break; } } else if (Class *classTy = ty->asClassType()) { if (ClassOrNamespace *b = context.lookupType(classTy)) { - completeClass(b, context); + completeClass(b); break; } } else if (Namespace *nsTy = ty->asNamespaceType()) { if (ClassOrNamespace *b = context.lookupType(nsTy)) { - completeNamespace(b, context); + completeNamespace(b); break; } @@ -1259,7 +1256,7 @@ bool CppCodeCompletion::completeInclude(const QTextCursor &cursor) return !m_completions.isEmpty(); } -void CppCodeCompletion::completeNamespace(ClassOrNamespace *b, const LookupContext &) +void CppCodeCompletion::completeNamespace(ClassOrNamespace *b) { QSet<ClassOrNamespace *> bindingsVisited; QList<ClassOrNamespace *> bindingsToVisit; @@ -1300,7 +1297,7 @@ void CppCodeCompletion::completeNamespace(ClassOrNamespace *b, const LookupConte } } -void CppCodeCompletion::completeClass(ClassOrNamespace *b, const LookupContext &, bool staticLookup) +void CppCodeCompletion::completeClass(ClassOrNamespace *b, bool staticLookup) { QSet<ClassOrNamespace *> bindingsVisited; QList<ClassOrNamespace *> bindingsToVisit; @@ -1348,16 +1345,17 @@ void CppCodeCompletion::completeClass(ClassOrNamespace *b, const LookupContext & } bool CppCodeCompletion::completeQtMethod(const QList<LookupItem> &results, - const LookupContext &newContext, bool wantSignals) { if (results.isEmpty()) return false; - DeprecatedLookupContext context(typeOfExpression.scope()->owner(), - newContext.expressionDocument(), - newContext.thisDocument(), - newContext.snapshot()); + const LookupContext &context = typeOfExpression.context(); + + DeprecatedLookupContext depContext(typeOfExpression.scope()->owner(), + context.expressionDocument(), + context.thisDocument(), + context.snapshot()); ConvertToCompletionItem toCompletionItem(this); Overview o; @@ -1378,7 +1376,7 @@ bool CppCodeCompletion::completeQtMethod(const QList<LookupItem> &results, if (! namedTy) // not a class name. continue; - ClassOrNamespace *b = newContext.lookupType(namedTy->name(), p.scope()); + ClassOrNamespace *b = context.lookupType(namedTy->name(), p.scope()); if (! b) continue; @@ -1398,8 +1396,8 @@ bool CppCodeCompletion::completeQtMethod(const QList<LookupItem> &results, continue; QList<Scope *> todo; - const QList<Scope *> visibleScopes = context.visibleScopes(p); - context.expand(klass->members(), visibleScopes, &todo); + const QList<Scope *> visibleScopes = depContext.visibleScopes(p); + depContext.expand(klass->members(), visibleScopes, &todo); foreach (Scope *scope, todo) { if (! scope->isClassScope()) diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index 6337ed5c9f2f3cd63418ff1ed17a5c6ec3cb6514..b168c54947e315e3cf3b66bee6769e7fe5e5dcfb 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -52,8 +52,6 @@ class BaseTextEditor; namespace CPlusPlus { class LookupItem; -class LookupContext; -class DeprecatedLookupContext; class ClassOrNamespace; } @@ -101,36 +99,27 @@ private: CPlusPlus::Document::Ptr thisDocument, const CPlusPlus::Snapshot &snapshot); - bool completeConstructorOrFunction(const QList<CPlusPlus::LookupItem> &, - const CPlusPlus::LookupContext &, + bool completeConstructorOrFunction(const QList<CPlusPlus::LookupItem> &results, int endOfExpression, bool toolTipOnly); - bool completeMember(const QList<CPlusPlus::LookupItem> &, - const CPlusPlus::LookupContext &context); + bool completeMember(const QList<CPlusPlus::LookupItem> &results); + bool completeScope(const QList<CPlusPlus::LookupItem> &results); - bool completeScope(const QList<CPlusPlus::LookupItem> &, - const CPlusPlus::LookupContext &context); - - void completeNamespace(CPlusPlus::ClassOrNamespace *binding, - const CPlusPlus::LookupContext &context); + void completeNamespace(CPlusPlus::ClassOrNamespace *binding); void completeClass(CPlusPlus::ClassOrNamespace *b, - const CPlusPlus::LookupContext &context, bool staticLookup = true); bool completeConstructors(CPlusPlus::Class *klass); bool completeQtMethod(const QList<CPlusPlus::LookupItem> &results, - const CPlusPlus::LookupContext &context, bool wantSignals); - bool completeSignal(const QList<CPlusPlus::LookupItem> &results, - const CPlusPlus::LookupContext &context) - { return completeQtMethod(results, context, true); } + bool completeSignal(const QList<CPlusPlus::LookupItem> &results) + { return completeQtMethod(results, true); } - bool completeSlot(const QList<CPlusPlus::LookupItem> &results, - const CPlusPlus::LookupContext &context) - { return completeQtMethod(results, context, false); } + bool completeSlot(const QList<CPlusPlus::LookupItem> &results) + { return completeQtMethod(results, false); } int findStartOfName(int pos = -1) const;