diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index b7917a45c16..e34c9242c89 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -26,7 +26,9 @@ #include "cppeditordocument.h" #include "cppeditorconstants.h" +#include "cppeditorplugin.h" #include "cpphighlighter.h" +#include "cppquickfixassistant.h" #include #include @@ -121,6 +123,11 @@ TextEditor::CompletionAssistProvider *CppEditorDocument::completionAssistProvide return m_completionAssistProvider; } +TextEditor::QuickFixAssistProvider *CppEditorDocument::quickFixAssistProvider() const +{ + return CppEditorPlugin::instance()->quickFixProvider(); +} + void CppEditorDocument::recalculateSemanticInfoDetached() { CppTools::BaseEditorDocumentProcessor *p = processor(); diff --git a/src/plugins/cppeditor/cppeditordocument.h b/src/plugins/cppeditor/cppeditordocument.h index 61185f97386..23313f13535 100644 --- a/src/plugins/cppeditor/cppeditordocument.h +++ b/src/plugins/cppeditor/cppeditordocument.h @@ -50,6 +50,7 @@ public: bool isObjCEnabled() const; TextEditor::CompletionAssistProvider *completionAssistProvider() const override; + TextEditor::QuickFixAssistProvider *quickFixAssistProvider() const override; void recalculateSemanticInfoDetached(); CppTools::SemanticInfo recalculateSemanticInfo(); // TODO: Remove me diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp index 669aa729e15..60b078d66a5 100644 --- a/src/plugins/cppeditor/cppeditorplugin.cpp +++ b/src/plugins/cppeditor/cppeditorplugin.cpp @@ -149,8 +149,7 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err addAutoReleasedObject(new CppIncludeHierarchyFactory); addAutoReleasedObject(new CppSnippetProvider); - m_quickFixProvider = new CppQuickFixAssistProvider; - addAutoReleasedObject(m_quickFixProvider); + m_quickFixProvider = new CppQuickFixAssistProvider(this); registerQuickFixes(this); Context context(Constants::CPPEDITOR_ID); diff --git a/src/plugins/cppeditor/cppquickfixassistant.h b/src/plugins/cppeditor/cppquickfixassistant.h index 96c259aab42..20a1b739802 100644 --- a/src/plugins/cppeditor/cppquickfixassistant.h +++ b/src/plugins/cppeditor/cppquickfixassistant.h @@ -71,6 +71,7 @@ private: class CppQuickFixAssistProvider : public TextEditor::QuickFixAssistProvider { public: + CppQuickFixAssistProvider(QObject *parent = 0) : TextEditor::QuickFixAssistProvider(parent) {} IAssistProvider::RunType runType() const override; bool supportsEditor(Core::Id editorId) const override; TextEditor::IAssistProcessor *createProcessor() const override; diff --git a/src/plugins/cpptools/cppcompletionassistprovider.cpp b/src/plugins/cpptools/cppcompletionassistprovider.cpp index 222d82f9356..ec7e58839ca 100644 --- a/src/plugins/cpptools/cppcompletionassistprovider.cpp +++ b/src/plugins/cpptools/cppcompletionassistprovider.cpp @@ -37,6 +37,10 @@ using namespace CppTools; // --------------------------- // CppCompletionAssistProvider // --------------------------- +CppCompletionAssistProvider::CppCompletionAssistProvider(QObject *parent) + : TextEditor::CompletionAssistProvider(parent) +{} + bool CppCompletionAssistProvider::supportsEditor(Core::Id editorId) const { return editorId == CppEditor::Constants::CPPEDITOR_ID; diff --git a/src/plugins/cpptools/cppcompletionassistprovider.h b/src/plugins/cpptools/cppcompletionassistprovider.h index 16382581c70..85f9657c62e 100644 --- a/src/plugins/cpptools/cppcompletionassistprovider.h +++ b/src/plugins/cpptools/cppcompletionassistprovider.h @@ -48,6 +48,7 @@ class CPPTOOLS_EXPORT CppCompletionAssistProvider : public TextEditor::Completio Q_OBJECT public: + CppCompletionAssistProvider(QObject *parent = 0); bool supportsEditor(Core::Id editorId) const override; int activationCharSequenceLength() const override; bool isActivationCharSequence(const QString &sequence) const override; diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index 0e73230ae02..d5bdc269ff7 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -27,7 +27,9 @@ #include "qmljseditorconstants.h" #include "qmljseditordocument_p.h" +#include "qmljseditorplugin.h" #include "qmljshighlighter.h" +#include "qmljsquickfixassist.h" #include "qmljssemantichighlighter.h" #include "qmljssemanticinfoupdater.h" #include "qmloutlinemodel.h" @@ -580,6 +582,11 @@ Internal::QmlOutlineModel *QmlJSEditorDocument::outlineModel() const return d->m_outlineModel; } +TextEditor::QuickFixAssistProvider *QmlJSEditorDocument::quickFixAssistProvider() const +{ + return Internal::QmlJSEditorPlugin::instance()->quickFixAssistProvider(); +} + void QmlJSEditorDocument::setDiagnosticRanges(const QVector &ranges) { d->m_diagnosticRanges = ranges; diff --git a/src/plugins/qmljseditor/qmljseditordocument.h b/src/plugins/qmljseditor/qmljseditordocument.h index 05d9e09457c..f883648381c 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.h +++ b/src/plugins/qmljseditor/qmljseditordocument.h @@ -52,6 +52,8 @@ public: void setDiagnosticRanges(const QVector &ranges); Internal::QmlOutlineModel *outlineModel() const; + TextEditor::QuickFixAssistProvider *quickFixAssistProvider() const override; + signals: void updateCodeWarnings(QmlJS::Document::Ptr doc); void semanticInfoUpdated(const QmlJSTools::SemanticInfo &semanticInfo); diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index adb409377b2..794bd99416b 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -182,8 +182,7 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e cmd = ActionManager::command(TextEditor::Constants::UN_COMMENT_SELECTION); contextMenu->addAction(cmd); - m_quickFixAssistProvider = new QmlJSQuickFixAssistProvider; - addAutoReleasedObject(m_quickFixAssistProvider); + m_quickFixAssistProvider = new QmlJSQuickFixAssistProvider(this); errorMessage->clear(); diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.cpp b/src/plugins/qmljseditor/qmljsquickfixassist.cpp index 17da3905f29..344a58031be 100644 --- a/src/plugins/qmljseditor/qmljsquickfixassist.cpp +++ b/src/plugins/qmljseditor/qmljsquickfixassist.cpp @@ -66,7 +66,8 @@ QmlJSRefactoringFilePtr QmlJSQuickFixAssistInterface::currentFile() const // --------------------------- // QmlJSQuickFixAssistProvider // --------------------------- -QmlJSQuickFixAssistProvider::QmlJSQuickFixAssistProvider() +QmlJSQuickFixAssistProvider::QmlJSQuickFixAssistProvider(QObject *parent) + : TextEditor::QuickFixAssistProvider(parent) {} QmlJSQuickFixAssistProvider::~QmlJSQuickFixAssistProvider() diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.h b/src/plugins/qmljseditor/qmljsquickfixassist.h index c606737c55c..50f26ecb6ed 100644 --- a/src/plugins/qmljseditor/qmljsquickfixassist.h +++ b/src/plugins/qmljseditor/qmljsquickfixassist.h @@ -55,7 +55,7 @@ private: class QmlJSQuickFixAssistProvider : public TextEditor::QuickFixAssistProvider { public: - QmlJSQuickFixAssistProvider(); + QmlJSQuickFixAssistProvider(QObject *parent = 0); ~QmlJSQuickFixAssistProvider(); IAssistProvider::RunType runType() const override; diff --git a/src/plugins/texteditor/circularclipboardassist.h b/src/plugins/texteditor/circularclipboardassist.h index d8d37c72cce..a15101669f9 100644 --- a/src/plugins/texteditor/circularclipboardassist.h +++ b/src/plugins/texteditor/circularclipboardassist.h @@ -34,6 +34,7 @@ namespace Internal { class ClipboardAssistProvider: public IAssistProvider { public: + ClipboardAssistProvider(QObject *parent = 0) : IAssistProvider(parent) {} IAssistProvider::RunType runType() const override; bool supportsEditor(Core::Id editorId) const override; IAssistProcessor *createProcessor() const override; diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index f83b5e855d9..f43afc20c0a 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -94,7 +94,6 @@ private: private: CodeAssistant *q; TextEditorWidget *m_editorWidget; - QList m_quickFixProviders; Internal::ProcessorRunner *m_requestRunner; IAssistProvider *m_requestProvider; IAssistProcessor *m_asyncProcessor; @@ -137,23 +136,7 @@ CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) void CodeAssistantPrivate::configure(TextEditorWidget *editorWidget) { - // @TODO: There's a list of providers but currently only the first one is used. Perhaps we - // should implement a truly mechanism to support multiple providers for an editor (either - // merging or not proposals) or just leave it as not extensible and store directly the one - // completion and quick-fix provider (getting rid of the list). - m_editorWidget = editorWidget; - m_quickFixProviders = ExtensionSystem::PluginManager::getObjects(); - - Core::Id editorId = m_editorWidget->textDocument()->id(); - auto it = m_quickFixProviders.begin(); - while (it != m_quickFixProviders.end()) { - if ((*it)->supportsEditor(editorId)) - ++it; - else - it = m_quickFixProviders.erase(it); - } - m_editorWidget->installEventFilter(this); } @@ -216,8 +199,8 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, if (!provider) { if (kind == Completion) provider = m_editorWidget->textDocument()->completionAssistProvider(); - else if (!m_quickFixProviders.isEmpty()) - provider = m_quickFixProviders.at(0); + else + provider = m_editorWidget->textDocument()->quickFixAssistProvider(); if (!provider) return; diff --git a/src/plugins/texteditor/codeassist/completionassistprovider.cpp b/src/plugins/texteditor/codeassist/completionassistprovider.cpp index 3aca7d93eb6..6d986ca75cf 100644 --- a/src/plugins/texteditor/codeassist/completionassistprovider.cpp +++ b/src/plugins/texteditor/codeassist/completionassistprovider.cpp @@ -29,7 +29,8 @@ using namespace TextEditor; -CompletionAssistProvider::CompletionAssistProvider() +CompletionAssistProvider::CompletionAssistProvider(QObject *parent) + : IAssistProvider(parent) {} CompletionAssistProvider::~CompletionAssistProvider() diff --git a/src/plugins/texteditor/codeassist/completionassistprovider.h b/src/plugins/texteditor/codeassist/completionassistprovider.h index c0c150b3ea6..8411820577e 100644 --- a/src/plugins/texteditor/codeassist/completionassistprovider.h +++ b/src/plugins/texteditor/codeassist/completionassistprovider.h @@ -35,7 +35,7 @@ class TEXTEDITOR_EXPORT CompletionAssistProvider : public IAssistProvider Q_OBJECT public: - CompletionAssistProvider(); + CompletionAssistProvider(QObject *parent = 0); ~CompletionAssistProvider(); IAssistProvider::RunType runType() const override; diff --git a/src/plugins/texteditor/codeassist/iassistprovider.h b/src/plugins/texteditor/codeassist/iassistprovider.h index 3be7a77cd02..22b6193202a 100644 --- a/src/plugins/texteditor/codeassist/iassistprovider.h +++ b/src/plugins/texteditor/codeassist/iassistprovider.h @@ -39,7 +39,7 @@ class TEXTEDITOR_EXPORT IAssistProvider : public QObject Q_OBJECT public: - IAssistProvider() {} + IAssistProvider(QObject *parent = 0) : QObject(parent) {} enum RunType { Synchronous, diff --git a/src/plugins/texteditor/codeassist/quickfixassistprovider.cpp b/src/plugins/texteditor/codeassist/quickfixassistprovider.cpp index 83ab1cedc5c..8539ff940bc 100644 --- a/src/plugins/texteditor/codeassist/quickfixassistprovider.cpp +++ b/src/plugins/texteditor/codeassist/quickfixassistprovider.cpp @@ -27,7 +27,8 @@ using namespace TextEditor; -QuickFixAssistProvider::QuickFixAssistProvider() +QuickFixAssistProvider::QuickFixAssistProvider(QObject *parent) + : IAssistProvider(parent) {} QuickFixAssistProvider::~QuickFixAssistProvider() diff --git a/src/plugins/texteditor/codeassist/quickfixassistprovider.h b/src/plugins/texteditor/codeassist/quickfixassistprovider.h index 6a480ca2c9d..e52f0d2c8a7 100644 --- a/src/plugins/texteditor/codeassist/quickfixassistprovider.h +++ b/src/plugins/texteditor/codeassist/quickfixassistprovider.h @@ -38,7 +38,7 @@ class TEXTEDITOR_EXPORT QuickFixAssistProvider : public IAssistProvider Q_OBJECT public: - QuickFixAssistProvider(); + QuickFixAssistProvider(QObject *parent = 0); ~QuickFixAssistProvider(); virtual QList quickFixFactories() const; diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index c1fd7545901..a84ffc3829d 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -370,6 +370,11 @@ CompletionAssistProvider *TextDocument::completionAssistProvider() const return d->m_completionAssistProvider; } +QuickFixAssistProvider *TextDocument::quickFixAssistProvider() const +{ + return 0; +} + void TextDocument::applyFontSettings() { d->m_fontSettingsNeedsApply = false; diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index 87a7d6ac2a2..6aa2e0bd7c6 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -45,6 +45,7 @@ class CompletionAssistProvider; class ExtraEncodingSettings; class FontSettings; class Indenter; +class QuickFixAssistProvider; class StorageSettings; class SyntaxHighlighter; class TabSettings; @@ -130,6 +131,7 @@ public: void setCompletionAssistProvider(CompletionAssistProvider *provider); virtual CompletionAssistProvider *completionAssistProvider() const; + virtual QuickFixAssistProvider *quickFixAssistProvider() const; void setTabSettings(const TextEditor::TabSettings &tabSettings); void setFontSettings(const TextEditor::FontSettings &fontSettings);