diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index ee18165ceab4e812aa83ad485836a65783d1d79a..9b84403a56d97d78fa86facafd9272fb9ecabed9 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -31,6 +31,7 @@ #include "cppeditor.h" #include <cplusplus/CppDocument.h> +#include <cplusplus/ResolveExpression.h> #include <TranslationUnit.h> #include <ASTVisitor.h> @@ -843,7 +844,6 @@ Snapshot QuickFixOperation::snapshot() const void QuickFixOperation::setSnapshot(const CPlusPlus::Snapshot &snapshot) { _snapshot = snapshot; - _typeOfExpression.setSnapshot(snapshot); } CPPEditor *QuickFixOperation::editor() const @@ -1063,14 +1063,16 @@ void QuickFixOperation::apply() * * NOTE: The fully specified types only stay valid until the next call to typeOf. */ -const QList<LookupItem> QuickFixOperation::typeOf(const CPlusPlus::ExpressionAST *ast) +const QList<LookupItem> QuickFixOperation::typeOf(CPlusPlus::ExpressionAST *ast) { unsigned line, column; document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column); Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column); - return _typeOfExpression(textOf(ast), document(), lastVisibleSymbol, - TypeOfExpression::Preprocess); + _lookupContext = LookupContext(lastVisibleSymbol, document(), document(), snapshot()); + + ResolveExpression resolveExpression(_lookupContext); + return resolveExpression(ast); } CPPQuickFixCollector::CPPQuickFixCollector() diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h index 5281876053d5e8bf13e7857427cbe9802b036829..e7f2b1a8962f853cc015a1bddaf71037b24399a2 100644 --- a/src/plugins/cppeditor/cppquickfix.h +++ b/src/plugins/cppeditor/cppquickfix.h @@ -33,7 +33,7 @@ #include <texteditor/icompletioncollector.h> #include <cplusplus/CppDocument.h> -#include <cplusplus/TypeOfExpression.h> +#include <cplusplus/LookupContext.h> #include <ASTfwd.h> #include <utils/changeset.h> @@ -128,7 +128,7 @@ protected: Range createRange(CPlusPlus::AST *ast) const; // ### rename me void reindent(const Range &range); - const QList<CPlusPlus::LookupItem> typeOf(const CPlusPlus::ExpressionAST *ast); + const QList<CPlusPlus::LookupItem> typeOf(CPlusPlus::ExpressionAST *ast); private: CPlusPlus::Document::Ptr _document; @@ -137,7 +137,7 @@ private: Utils::ChangeSet _changeSet; CPPEditor *_editor; CPlusPlus::AST *_topLevelNode; - CPlusPlus::TypeOfExpression _typeOfExpression; + CPlusPlus::LookupContext _lookupContext; }; class CPPQuickFixCollector: public TextEditor::IQuickFixCollector