summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@theqtcompany.com>2016-03-16 13:04:05 +0100
committerDavid Schulz <david.schulz@theqtcompany.com>2016-04-28 12:14:41 +0000
commit898968b101abe4d197f0cfcdcdcebb58dfe0fe3c (patch)
tree87c83c2bba27bcea3d21db164925fc9197b940c2
parent16aeecea2c88d64d29f1d4f4e02939c790445e87 (diff)
downloadqt-creator-898968b101abe4d197f0cfcdcdcebb58dfe0fe3c.tar.gz
CodeAssist: Support only one quickfix assistant per editor class.
Currently we are just using the first that is found. Which could lead to unexpected behavior. Adjust the API to make clear just one assistant is supported per editor type. Change-Id: I711e66b4c5c5f347118357a8bafa0ffc6d650f7e Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/plugins/cppeditor/cppeditordocument.cpp7
-rw-r--r--src/plugins/cppeditor/cppeditordocument.h1
-rw-r--r--src/plugins/cppeditor/cppeditorplugin.cpp3
-rw-r--r--src/plugins/cppeditor/cppquickfixassistant.h1
-rw-r--r--src/plugins/cpptools/cppcompletionassistprovider.cpp4
-rw-r--r--src/plugins/cpptools/cppcompletionassistprovider.h1
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument.cpp7
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument.h2
-rw-r--r--src/plugins/qmljseditor/qmljseditorplugin.cpp3
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixassist.cpp3
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixassist.h2
-rw-r--r--src/plugins/texteditor/circularclipboardassist.h1
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp21
-rw-r--r--src/plugins/texteditor/codeassist/completionassistprovider.cpp3
-rw-r--r--src/plugins/texteditor/codeassist/completionassistprovider.h2
-rw-r--r--src/plugins/texteditor/codeassist/iassistprovider.h2
-rw-r--r--src/plugins/texteditor/codeassist/quickfixassistprovider.cpp3
-rw-r--r--src/plugins/texteditor/codeassist/quickfixassistprovider.h2
-rw-r--r--src/plugins/texteditor/textdocument.cpp5
-rw-r--r--src/plugins/texteditor/textdocument.h2
20 files changed, 45 insertions, 30 deletions
diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp
index b7917a45c1..e34c9242c8 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 <cpptools/baseeditordocumentparser.h>
#include <cpptools/builtineditordocumentprocessor.h>
@@ -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 61185f9738..23313f1353 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 669aa729e1..60b078d66a 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 96c259aab4..20a1b73980 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 222d82f935..ec7e58839c 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 16382581c7..85f9657c62 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 0e73230ae0..d5bdc269ff 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<QTextLayout::FormatRange> &ranges)
{
d->m_diagnosticRanges = ranges;
diff --git a/src/plugins/qmljseditor/qmljseditordocument.h b/src/plugins/qmljseditor/qmljseditordocument.h
index 05d9e09457..f883648381 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.h
+++ b/src/plugins/qmljseditor/qmljseditordocument.h
@@ -52,6 +52,8 @@ public:
void setDiagnosticRanges(const QVector<QTextLayout::FormatRange> &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 adb409377b..794bd99416 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 17da3905f2..344a58031b 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 c606737c55..50f26ecb6e 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 d8d37c72cc..a15101669f 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 f83b5e855d..f43afc20c0 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<QuickFixAssistProvider *> 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<QuickFixAssistProvider>();
-
- 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 3aca7d93eb..6d986ca75c 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 c0c150b3ea..8411820577 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 3be7a77cd0..22b6193202 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 83ab1cedc5..8539ff940b 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 6a480ca2c9..e52f0d2c8a 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<QuickFixFactory *> quickFixFactories() const;
diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp
index c1fd754590..a84ffc3829 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 87a7d6ac2a..6aa2e0bd7c 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);