From e78380fdf2ae28550d1ad4f336f1d0d469c10ed4 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 19 Jul 2010 18:27:11 +0200 Subject: [PATCH] Share the LookupContext. --- src/plugins/cppeditor/cppquickfix.cpp | 19 +++++++---------- src/plugins/cppeditor/cppquickfix.h | 1 + .../cppeditor/cpprefactoringchanges.cpp | 21 +++++++++++++------ src/plugins/cppeditor/cpprefactoringchanges.h | 8 ++++++- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index 4e6c579e8cf..2eea2cd0b42 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -909,8 +909,7 @@ public: } } - LookupContext context(document(), snapshot()); - QSharedPointer<Control> control = context.control(); + QSharedPointer<Control> control = context().control(); const Name *trName = control->nameId(control->findOrInsertIdentifier("tr")); // Check whether we are in a method: @@ -918,7 +917,7 @@ public: { if (FunctionDefinitionAST *definition = path.at(i)->asFunctionDefinition()) { Function *function = definition->symbol; - ClassOrNamespace *b = context.lookupType(function); + ClassOrNamespace *b = context().lookupType(function); if (b) { // Do we have a tr method? foreach(const LookupItem &r, b->find(trName)) { @@ -1388,14 +1387,12 @@ public: { if (ast && isCursorOn(ast)) { if (const Name *name = ast->name) { - context = LookupContext(document(), snapshot()); - unsigned line, column; document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column); fwdClass = 0; - foreach (const LookupItem &r, context.lookup(name, document()->scopeAt(line, column))) { + foreach (const LookupItem &r, context().lookup(name, document()->scopeAt(line, column))) { if (! r.declaration()) continue; else if (ForwardClassDeclaration *fwd = r.declaration()->asForwardClassDeclaration()) @@ -1488,7 +1485,6 @@ public: } private: - LookupContext context; Symbol *fwdClass; }; @@ -1513,7 +1509,7 @@ int CppQuickFixOperation::match(TextEditor::QuickFixState *state) _document = s->info.doc; if (_refactoringChanges) delete _refactoringChanges; - _refactoringChanges = new CppRefactoringChanges(s->snapshot); + _refactoringChanges = new CppRefactoringChanges(_document, s->snapshot); return match(s->path); } @@ -1546,9 +1542,10 @@ Document::Ptr CppQuickFixOperation::document() const { return _document; } const Snapshot &CppQuickFixOperation::snapshot() const -{ - return _refactoringChanges->snapshot(); -} +{ return _refactoringChanges->snapshot(); } + +const CPlusPlus::LookupContext &CppQuickFixOperation::context() const +{ return _refactoringChanges->context(); } const CPlusPlus::Token &CppQuickFixOperation::tokenAt(unsigned index) const { return _document->translationUnit()->tokenAt(index); } diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h index d9107fe8ebb..00c4f4a1df8 100644 --- a/src/plugins/cppeditor/cppquickfix.h +++ b/src/plugins/cppeditor/cppquickfix.h @@ -62,6 +62,7 @@ public: CPlusPlus::Document::Ptr document() const; const CPlusPlus::Snapshot &snapshot() const; + const CPlusPlus::LookupContext &context() const; virtual int match(TextEditor::QuickFixState *state); diff --git a/src/plugins/cppeditor/cpprefactoringchanges.cpp b/src/plugins/cppeditor/cpprefactoringchanges.cpp index 196ce53fd40..25aec463c71 100644 --- a/src/plugins/cppeditor/cpprefactoringchanges.cpp +++ b/src/plugins/cppeditor/cpprefactoringchanges.cpp @@ -29,24 +29,33 @@ #include "cpprefactoringchanges.h" -using namespace CPlusPlus; -using namespace CppTools; -using namespace TextEditor; using namespace CppEditor; +using namespace CPlusPlus; -CppRefactoringChanges::CppRefactoringChanges(const Snapshot &snapshot) - : m_snapshot(snapshot) +CppRefactoringChanges::CppRefactoringChanges(const Document::Ptr &thisDocument, const Snapshot &snapshot) + : m_thisDocument(thisDocument) + , m_snapshot(snapshot) + , m_context(m_thisDocument, m_snapshot) , m_modelManager(CppTools::CppModelManagerInterface::instance()) { Q_ASSERT(m_modelManager); m_workingCopy = m_modelManager->workingCopy(); } -const CPlusPlus::Snapshot &CppRefactoringChanges::snapshot() const +Document::Ptr CppRefactoringChanges::thisDocument() const +{ + return m_thisDocument; +} + +const Snapshot &CppRefactoringChanges::snapshot() const { return m_snapshot; } +const LookupContext &CppRefactoringChanges::context() const +{ + return m_context; +} QStringList CppRefactoringChanges::apply() { diff --git a/src/plugins/cppeditor/cpprefactoringchanges.h b/src/plugins/cppeditor/cpprefactoringchanges.h index 147d9014a1a..063a99ac8a0 100644 --- a/src/plugins/cppeditor/cpprefactoringchanges.h +++ b/src/plugins/cppeditor/cpprefactoringchanges.h @@ -31,6 +31,7 @@ #define CPPREFACTORINGCHANGES_H #include <cplusplus/CppDocument.h> +#include <cplusplus/LookupContext.h> #include <cpptools/cppmodelmanagerinterface.h> #include <cppeditor/cppeditor_global.h> @@ -42,15 +43,20 @@ namespace CppEditor { class CPPEDITOR_EXPORT CppRefactoringChanges: public TextEditor::RefactoringChanges { public: - CppRefactoringChanges(const CPlusPlus::Snapshot &snapshot); + CppRefactoringChanges(const CPlusPlus::Document::Ptr &thisDocument, + const CPlusPlus::Snapshot &snapshot); virtual QStringList apply(); + CPlusPlus::Document::Ptr thisDocument() const; const CPlusPlus::Snapshot &snapshot() const; CPlusPlus::Document::Ptr document(const QString &fileName) const; + const CPlusPlus::LookupContext &context() const; private: + CPlusPlus::Document::Ptr m_thisDocument; CPlusPlus::Snapshot m_snapshot; + CPlusPlus::LookupContext m_context; CppTools::CppModelManagerInterface *m_modelManager; CppTools::CppModelManagerInterface::WorkingCopy m_workingCopy; }; -- GitLab