From 23aa0af883082a46255336f629951c96372b970f Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 22 Jun 2010 14:14:22 +0200 Subject: [PATCH] Introduced IQuickFixFactory. --- src/plugins/cppeditor/cppplugin.cpp | 2 ++ src/plugins/cppeditor/cppquickfix.cpp | 15 +++++++++++++-- src/plugins/cppeditor/cppquickfix.h | 15 ++++++++++++++- src/plugins/texteditor/quickfix.cpp | 26 +++++++++++++++++++++++++- src/plugins/texteditor/quickfix.h | 13 ++++++++++++- 5 files changed, 66 insertions(+), 5 deletions(-) diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index c67b3f4f7ad..6d0b7bbc412 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -207,6 +207,8 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess m_quickFixCollector = new CppQuickFixCollector; addAutoReleasedObject(m_quickFixCollector); + addAutoReleasedObject(new CppQuickFixFactory); + CppFileWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); wizardParameters.setCategory(QLatin1String(Constants::WIZARD_CATEGORY)); diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index 72bc705ed50..b0dadc82601 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -50,6 +50,7 @@ #include <cppeditor/cpprefactoringchanges.h> #include <cpptools/cpptoolsconstants.h> #include <cpptools/cppmodelmanagerinterface.h> +#include <extensionsystem/pluginmanager.h> #include <QtGui/QApplication> #include <QtGui/QTextBlock> @@ -1079,8 +1080,19 @@ TextEditor::QuickFixState *CppQuickFixCollector::initializeCompletion(TextEditor return 0; } -QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixCollector::quickFixOperations(TextEditor::BaseTextEditor *editor) const +CppQuickFixFactory::CppQuickFixFactory(QObject *parent) + : TextEditor::IQuickFixFactory(parent) { +} + +CppQuickFixFactory::~CppQuickFixFactory() +{ +} + +QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixFactory::quickFixOperations(TextEditor::BaseTextEditor *editor) +{ + QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations; + QSharedPointer<RewriteLogicalAndOp> rewriteLogicalAndOp(new RewriteLogicalAndOp(editor)); QSharedPointer<SplitIfStatementOp> splitIfStatementOp(new SplitIfStatementOp(editor)); QSharedPointer<MoveDeclarationOutOfIfOp> moveDeclarationOutOfIfOp(new MoveDeclarationOutOfIfOp(editor)); @@ -1092,7 +1104,6 @@ QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixCollector::quickFixOperatio QSharedPointer<WrapStringLiteral> wrapStringLiteral(new WrapStringLiteral(editor)); QSharedPointer<CStringToNSString> wrapCString(new CStringToNSString(editor)); - QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations; quickFixOperations.append(rewriteLogicalAndOp); quickFixOperations.append(splitIfStatementOp); quickFixOperations.append(moveDeclarationOutOfIfOp); diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h index 664a6944eb4..d9107fe8ebb 100644 --- a/src/plugins/cppeditor/cppquickfix.h +++ b/src/plugins/cppeditor/cppquickfix.h @@ -107,7 +107,20 @@ public: virtual bool supportsEditor(TextEditor::ITextEditable *editor); virtual TextEditor::QuickFixState *initializeCompletion(TextEditor::ITextEditable *editable); - virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const; +}; + +class CppQuickFixFactory: public TextEditor::IQuickFixFactory +{ + Q_OBJECT + +public: + CppQuickFixFactory(QObject *parent = 0); + virtual ~CppQuickFixFactory(); + + /* + * Returns true if this IQuickFixFactory can be used with the given editor. + */ + virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor); }; } // end of namespace Internal diff --git a/src/plugins/texteditor/quickfix.cpp b/src/plugins/texteditor/quickfix.cpp index 974a4fa2a97..9918ad4f5b4 100644 --- a/src/plugins/texteditor/quickfix.cpp +++ b/src/plugins/texteditor/quickfix.cpp @@ -31,7 +31,7 @@ #include "basetexteditor.h" #include <coreplugin/ifile.h> - +#include <extensionsystem/pluginmanager.h> #include <QtGui/QApplication> #include <QtGui/QTextBlock> @@ -40,6 +40,7 @@ using TextEditor::RefactoringChanges; using TextEditor::QuickFixOperation; using TextEditor::QuickFixCollector; +using TextEditor::IQuickFixFactory; QuickFixOperation::QuickFixOperation(TextEditor::BaseTextEditor *editor) : _editor(editor) @@ -184,3 +185,26 @@ void QuickFixCollector::cleanup() { _quickFixes.clear(); } + +QList<TextEditor::QuickFixOperation::Ptr> QuickFixCollector::quickFixOperations(TextEditor::BaseTextEditor *editor) const +{ + QList<TextEditor::IQuickFixFactory *> factories = + ExtensionSystem::PluginManager::instance()->getObjects<TextEditor::IQuickFixFactory>(); + + QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations; + + foreach (TextEditor::IQuickFixFactory *factory, factories) + quickFixOperations += factory->quickFixOperations(editor); + + return quickFixOperations; +} + +IQuickFixFactory::IQuickFixFactory(QObject *parent) + : QObject(parent) +{ +} + +IQuickFixFactory::~IQuickFixFactory() +{ + +} diff --git a/src/plugins/texteditor/quickfix.h b/src/plugins/texteditor/quickfix.h index aec71790231..fd731c6c5a1 100644 --- a/src/plugins/texteditor/quickfix.h +++ b/src/plugins/texteditor/quickfix.h @@ -115,13 +115,24 @@ public: virtual void cleanup(); virtual TextEditor::QuickFixState *initializeCompletion(TextEditor::ITextEditable *editable) = 0; - virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const = 0; + virtual QList<TextEditor::QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) const; private: TextEditor::ITextEditable *_editable; QList<TextEditor::QuickFixOperation::Ptr> _quickFixes; }; +class TEXTEDITOR_EXPORT IQuickFixFactory: public QObject +{ + Q_OBJECT + +public: + IQuickFixFactory(QObject *parent = 0); + virtual ~IQuickFixFactory(); + + virtual QList<QuickFixOperation::Ptr> quickFixOperations(TextEditor::BaseTextEditor *editor) = 0; +}; + } // end of namespace TextEditor #endif // TEXTEDITORQUICKFIX_H -- GitLab