diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index c67b3f4f7ad84851efcd6bb0615506dc4fb21f55..6d0b7bbc4126aa191cdadf63c5b830d97b9feaa3 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 72bc705ed50f373384bafcfedf038467bf6e17cf..b0dadc82601e0d493e8c54aabdf0e4b04fe1289f 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 664a6944eb40c3a17e078e24867ccdab7721ed60..d9107fe8ebbf8a1c9ec4f35e4bc158a078e6cc57 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 974a4fa2a97894f12cdef5931f9e327ad760f819..9918ad4f5b4d192b983437de001e89b90db76a6a 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 aec71790231558fa90c988a63da529ca99c59dab..fd731c6c5a1533bf93b0832eeb4acc85ca7268d8 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