Editor: pass AssistInterface to createProcessor

The interface can be used for checking the context of a codeassist
request to determine
the correct processor that has to be created.

Change-Id: I47ddb05c46399566e27bae21711f11a3a4132c3f
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2021-09-15 07:04:12 +02:00
parent 897d3349fa
commit 4324f3e8c1
38 changed files with 48 additions and 42 deletions

View File

@@ -54,7 +54,8 @@ TextEditor::IAssistProvider::RunType ClangCompletionAssistProvider::runType() co
return Asynchronous; return Asynchronous;
} }
TextEditor::IAssistProcessor *ClangCompletionAssistProvider::createProcessor() const TextEditor::IAssistProcessor *ClangCompletionAssistProvider::createProcessor(
const TextEditor::AssistInterface *) const
{ {
return new ClangCompletionAssistProcessor; return new ClangCompletionAssistProcessor;
} }

View File

@@ -44,7 +44,7 @@ public:
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
TextEditor::AssistInterface *createAssistInterface( TextEditor::AssistInterface *createAssistInterface(
const Utils::FilePath &filePath, const Utils::FilePath &filePath,
const TextEditor::TextEditorWidget *textEditorWidget, const TextEditor::TextEditorWidget *textEditorWidget,

View File

@@ -525,7 +525,7 @@ public:
private: private:
RunType runType() const override { return Asynchronous; } RunType runType() const override { return Asynchronous; }
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
ClangdClient::Private * const m_data; ClangdClient::Private * const m_data;
}; };
@@ -723,7 +723,7 @@ public:
private: private:
RunType runType() const override { return Synchronous; } RunType runType() const override { return Synchronous; }
TextEditor::IAssistProcessor *createProcessor() const override TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override
{ {
return new DoxygenAssistProcessor(m_position, m_completionOperator, m_proposalHandler); return new DoxygenAssistProcessor(m_position, m_completionOperator, m_proposalHandler);
} }
@@ -2690,7 +2690,8 @@ ClangdClient::VirtualFunctionAssistProcessor::createEntry(const QString &name,
return item; return item;
} }
TextEditor::IAssistProcessor *ClangdClient::VirtualFunctionAssistProvider::createProcessor() const TextEditor::IAssistProcessor *ClangdClient::VirtualFunctionAssistProvider::createProcessor(
const TextEditor::AssistInterface *) const
{ {
return m_data->followSymbolData->virtualFuncAssistProcessor return m_data->followSymbolData->virtualFuncAssistProcessor
= new VirtualFunctionAssistProcessor(m_data); = new VirtualFunctionAssistProcessor(m_data);

View File

@@ -119,7 +119,7 @@ TextEditor::ProposalModelPtr completionResults(TextEditor::BaseTextEditor *textE
QTC_ASSERT(assistProvider->runType() == IAssistProvider::Asynchronous, QTC_ASSERT(assistProvider->runType() == IAssistProvider::Asynchronous,
return TextEditor::ProposalModelPtr()); return TextEditor::ProposalModelPtr());
QScopedPointer<IAssistProcessor> processor(assistProvider->createProcessor()); QScopedPointer<IAssistProcessor> processor(assistProvider->createProcessor(assistInterface));
QTC_ASSERT(processor, return TextEditor::ProposalModelPtr()); QTC_ASSERT(processor, return TextEditor::ProposalModelPtr());
WaitForAsyncCompletions waitForCompletions; WaitForAsyncCompletions waitForCompletions;

View File

@@ -44,7 +44,7 @@ using namespace ProjectExplorer;
// CMakeFileCompletionAssistProvider // CMakeFileCompletionAssistProvider
// ------------------------------- // -------------------------------
IAssistProcessor *CMakeFileCompletionAssistProvider::createProcessor() const IAssistProcessor *CMakeFileCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new CMakeFileCompletionAssist; return new CMakeFileCompletionAssist;
} }

View File

@@ -44,7 +44,7 @@ class CMakeFileCompletionAssistProvider : public TextEditor::CompletionAssistPro
Q_OBJECT Q_OBJECT
public: public:
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
}; };
} // Internal } // Internal

View File

@@ -417,7 +417,7 @@ int CppFunctionHintModel::activeArgument(const QString &prefix) const
// InternalCompletionAssistProvider // InternalCompletionAssistProvider
// --------------------------- // ---------------------------
IAssistProcessor *InternalCompletionAssistProvider::createProcessor() const IAssistProcessor *InternalCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new InternalCppCompletionAssistProcessor; return new InternalCppCompletionAssistProcessor;
} }

View File

@@ -81,7 +81,7 @@ class InternalCompletionAssistProvider : public CppCompletionAssistProvider
Q_OBJECT Q_OBJECT
public: public:
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
TextEditor::AssistInterface *createAssistInterface( TextEditor::AssistInterface *createAssistInterface(
const Utils::FilePath &filePath, const Utils::FilePath &filePath,

View File

@@ -1122,7 +1122,8 @@ static void addRefactoringActions(QMenu *menu, AssistInterface *iface)
using Processor = QScopedPointer<IAssistProcessor>; using Processor = QScopedPointer<IAssistProcessor>;
using Proposal = QScopedPointer<IAssistProposal>; using Proposal = QScopedPointer<IAssistProposal>;
const Processor processor(CppEditorPlugin::instance()->quickFixProvider()->createProcessor()); const Processor processor(
CppEditorPlugin::instance()->quickFixProvider()->createProcessor(iface));
const Proposal proposal(processor->perform(iface)); // OK, perform() takes ownership of iface. const Proposal proposal(processor->perform(iface)); // OK, perform() takes ownership of iface.
if (proposal) { if (proposal) {
auto model = proposal->model().staticCast<GenericProposalModel>(); auto model = proposal->model().staticCast<GenericProposalModel>();

View File

@@ -72,7 +72,7 @@ IAssistProvider::RunType CppQuickFixAssistProvider::runType() const
return Synchronous; return Synchronous;
} }
IAssistProcessor *CppQuickFixAssistProvider::createProcessor() const IAssistProcessor *CppQuickFixAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new CppQuickFixAssistProcessor; return new CppQuickFixAssistProcessor;
} }

View File

@@ -70,7 +70,7 @@ class CppQuickFixAssistProvider : public TextEditor::IAssistProvider
public: public:
CppQuickFixAssistProvider() = default; CppQuickFixAssistProvider() = default;
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
}; };
} // Internal } // Internal

View File

@@ -189,7 +189,7 @@ IAssistProvider::RunType VirtualFunctionAssistProvider::runType() const
return AsynchronousWithThread; return AsynchronousWithThread;
} }
IAssistProcessor *VirtualFunctionAssistProvider::createProcessor() const IAssistProcessor *VirtualFunctionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new VirtualFunctionAssistProcessor(m_params); return new VirtualFunctionAssistProcessor(m_params);
} }

View File

@@ -77,7 +77,7 @@ public:
void clearParams() { m_params = Parameters(); } void clearParams() { m_params = Parameters(); }
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
private: private:
Parameters m_params; Parameters m_params;

View File

@@ -137,9 +137,9 @@ public:
{ {
VirtualFunctionAssistProvider::configure(params); VirtualFunctionAssistProvider::configure(params);
const QScopedPointer<IAssistProcessor> processor(createProcessor());
AssistInterface *assistInterface AssistInterface *assistInterface
= m_editorWidget->createAssistInterface(FollowSymbol, ExplicitlyInvoked); = m_editorWidget->createAssistInterface(FollowSymbol, ExplicitlyInvoked);
const QScopedPointer<IAssistProcessor> processor(createProcessor(assistInterface));
const QScopedPointer<IAssistProposal> immediateProposal( const QScopedPointer<IAssistProposal> immediateProposal(
processor->immediateProposal(assistInterface)); processor->immediateProposal(assistInterface));

View File

@@ -985,7 +985,7 @@ void FakeVimUserCommandsPage::apply()
class FakeVimCompletionAssistProvider : public CompletionAssistProvider class FakeVimCompletionAssistProvider : public CompletionAssistProvider
{ {
public: public:
IAssistProcessor *createProcessor() const override; IAssistProcessor *createProcessor(const AssistInterface *) const override;
void setActive(const QString &needle, bool forward, FakeVimHandler *handler) void setActive(const QString &needle, bool forward, FakeVimHandler *handler)
{ {
@@ -1122,7 +1122,7 @@ private:
const FakeVimCompletionAssistProvider *m_provider; const FakeVimCompletionAssistProvider *m_provider;
}; };
IAssistProcessor *FakeVimCompletionAssistProvider::createProcessor() const IAssistProcessor *FakeVimCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new FakeVimCompletionAssistProcessor(this); return new FakeVimCompletionAssistProcessor(this);
} }

View File

@@ -187,7 +187,7 @@ static QIcon glslIcon(IconTypes iconType)
// ---------------------------- // ----------------------------
// GlslCompletionAssistProvider // GlslCompletionAssistProvider
// ---------------------------- // ----------------------------
IAssistProcessor *GlslCompletionAssistProvider::createProcessor() const IAssistProcessor *GlslCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new GlslCompletionAssistProcessor; return new GlslCompletionAssistProcessor;
} }

View File

@@ -83,7 +83,7 @@ class GlslCompletionAssistProvider : public TextEditor::CompletionAssistProvider
Q_OBJECT Q_OBJECT
public: public:
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
int activationCharSequenceLength() const override; int activationCharSequenceLength() const override;
bool isActivationCharSequence(const QString &sequence) const override; bool isActivationCharSequence(const QString &sequence) const override;

View File

@@ -474,7 +474,8 @@ LanguageClientCompletionAssistProvider::LanguageClientCompletionAssistProvider(C
, m_client(client) , m_client(client)
{ } { }
IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor() const IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor(
const AssistInterface *) const
{ {
return new LanguageClientCompletionAssistProcessor(m_client, m_itemsTransformer, m_applyHelper, return new LanguageClientCompletionAssistProcessor(m_client, m_itemsTransformer, m_applyHelper,
m_proposalHandler, m_snippetsGroup); m_proposalHandler, m_snippetsGroup);

View File

@@ -62,7 +62,7 @@ class LANGUAGECLIENT_EXPORT LanguageClientCompletionAssistProvider
public: public:
LanguageClientCompletionAssistProvider(Client *client); LanguageClientCompletionAssistProvider(Client *client);
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
RunType runType() const override; RunType runType() const override;
int activationCharSequenceLength() const override; int activationCharSequenceLength() const override;

View File

@@ -157,7 +157,8 @@ FunctionHintAssistProvider::FunctionHintAssistProvider(Client *client)
, m_client(client) , m_client(client)
{} {}
TextEditor::IAssistProcessor *FunctionHintAssistProvider::createProcessor() const TextEditor::IAssistProcessor *FunctionHintAssistProvider::createProcessor(
const AssistInterface *) const
{ {
return new FunctionHintProcessor(m_client, m_proposalHandler); return new FunctionHintProcessor(m_client, m_proposalHandler);
} }

View File

@@ -43,7 +43,7 @@ class FunctionHintAssistProvider : public TextEditor::CompletionAssistProvider
public: public:
explicit FunctionHintAssistProvider(Client *client); explicit FunctionHintAssistProvider(Client *client);
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
RunType runType() const override; RunType runType() const override;
int activationCharSequenceLength() const override; int activationCharSequenceLength() const override;

View File

@@ -165,7 +165,7 @@ IAssistProvider::RunType LanguageClientQuickFixProvider::runType() const
return Asynchronous; return Asynchronous;
} }
IAssistProcessor *LanguageClientQuickFixProvider::createProcessor() const IAssistProcessor *LanguageClientQuickFixProvider::createProcessor(const AssistInterface *) const
{ {
return new LanguageClientQuickFixAssistProcessor(m_client); return new LanguageClientQuickFixAssistProcessor(m_client);
} }

View File

@@ -54,7 +54,7 @@ class LANGUAGECLIENT_EXPORT LanguageClientQuickFixProvider : public TextEditor::
public: public:
explicit LanguageClientQuickFixProvider(Client *client); explicit LanguageClientQuickFixProvider(Client *client);
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
private: private:
Client *m_client = nullptr; // not owned Client *m_client = nullptr; // not owned

View File

@@ -259,7 +259,7 @@ private:
}; };
TextEditor::IAssistProcessor *NimCompletionAssistProvider::createProcessor() const IAssistProcessor *NimCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new NimCompletionAssistProcessor(); return new NimCompletionAssistProcessor();
} }

View File

@@ -34,7 +34,7 @@ class NimCompletionAssistProvider : public TextEditor::CompletionAssistProvider
Q_OBJECT Q_OBJECT
public: public:
TextEditor::IAssistProcessor *createProcessor() const final; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const final;
int activationCharSequenceLength() const final; int activationCharSequenceLength() const final;
bool isActivationCharSequence(const QString &sequence) const final; bool isActivationCharSequence(const QString &sequence) const final;
RunType runType() const final; RunType runType() const final;

View File

@@ -515,7 +515,7 @@ bool QmlJSCompletionAssistProvider::isContinuationChar(const QChar &c) const
return isIdentifierChar(c, false); return isIdentifierChar(c, false);
} }
IAssistProcessor *QmlJSCompletionAssistProvider::createProcessor() const IAssistProcessor *QmlJSCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new QmlJSCompletionAssistProcessor; return new QmlJSCompletionAssistProcessor;
} }

View File

@@ -125,7 +125,7 @@ class QMLJSEDITOR_EXPORT QmlJSCompletionAssistProvider : public TextEditor::Comp
Q_OBJECT Q_OBJECT
public: public:
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
int activationCharSequenceLength() const override; int activationCharSequenceLength() const override;
bool isActivationCharSequence(const QString &sequence) const override; bool isActivationCharSequence(const QString &sequence) const override;

View File

@@ -880,7 +880,7 @@ void QmlJSEditorWidget::contextMenuEvent(QContextMenuEvent *e)
AssistInterface *interface = createAssistInterface(QuickFix, ExplicitlyInvoked); AssistInterface *interface = createAssistInterface(QuickFix, ExplicitlyInvoked);
if (interface) { if (interface) {
QScopedPointer<IAssistProcessor> processor( QScopedPointer<IAssistProcessor> processor(
Internal::QmlJSEditorPlugin::quickFixAssistProvider()->createProcessor()); Internal::QmlJSEditorPlugin::quickFixAssistProvider()->createProcessor(interface));
QScopedPointer<IAssistProposal> proposal(processor->perform(interface)); QScopedPointer<IAssistProposal> proposal(processor->perform(interface));
if (!proposal.isNull()) { if (!proposal.isNull()) {
GenericProposalModelPtr model = proposal->model().staticCast<GenericProposalModel>(); GenericProposalModelPtr model = proposal->model().staticCast<GenericProposalModel>();

View File

@@ -86,7 +86,7 @@ IAssistProvider::RunType QmlJSQuickFixAssistProvider::runType() const
return Synchronous; return Synchronous;
} }
IAssistProcessor *QmlJSQuickFixAssistProvider::createProcessor() const IAssistProcessor *QmlJSQuickFixAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new QmlJSQuickFixAssistProcessor; return new QmlJSQuickFixAssistProcessor;
} }

View File

@@ -59,7 +59,7 @@ public:
~QmlJSQuickFixAssistProvider() override = default; ~QmlJSQuickFixAssistProvider() override = default;
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
TextEditor::IAssistProcessor *createProcessor() const override; TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
}; };
} // Internal } // Internal

View File

@@ -113,7 +113,7 @@ IAssistProvider::RunType ClipboardAssistProvider::runType() const
return Synchronous; return Synchronous;
} }
IAssistProcessor *ClipboardAssistProvider::createProcessor() const IAssistProcessor *ClipboardAssistProvider::createProcessor(const AssistInterface *) const
{ {
return new ClipboardAssistProcessor; return new ClipboardAssistProcessor;
} }

View File

@@ -36,7 +36,7 @@ class ClipboardAssistProvider: public IAssistProvider
public: public:
ClipboardAssistProvider(QObject *parent = nullptr) : IAssistProvider(parent) {} ClipboardAssistProvider(QObject *parent = nullptr) : IAssistProvider(parent) {}
IAssistProvider::RunType runType() const override; IAssistProvider::RunType runType() const override;
IAssistProcessor *createProcessor() const override; IAssistProcessor *createProcessor(const AssistInterface *) const override;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -221,7 +221,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
m_assistKind = kind; m_assistKind = kind;
m_requestProvider = provider; m_requestProvider = provider;
IAssistProcessor *processor = provider->createProcessor(); IAssistProcessor *processor = provider->createProcessor(assistInterface);
switch (provider->runType()) { switch (provider->runType()) {
case IAssistProvider::Synchronous: { case IAssistProvider::Synchronous: {

View File

@@ -69,7 +69,7 @@ IAssistProvider::RunType DocumentContentCompletionProvider::runType() const
return Asynchronous; return Asynchronous;
} }
IAssistProcessor *DocumentContentCompletionProvider::createProcessor() const IAssistProcessor *DocumentContentCompletionProvider::createProcessor(const AssistInterface *) const
{ {
return new DocumentContentCompletionProcessor(m_snippetGroup); return new DocumentContentCompletionProcessor(m_snippetGroup);
} }

View File

@@ -40,7 +40,7 @@ public:
const QString &snippetGroup = QString(Constants::TEXT_SNIPPET_GROUP_ID)); const QString &snippetGroup = QString(Constants::TEXT_SNIPPET_GROUP_ID));
RunType runType() const override; RunType runType() const override;
IAssistProcessor *createProcessor() const override; IAssistProcessor *createProcessor(const AssistInterface *) const override;
private: private:
QString m_snippetGroup; QString m_snippetGroup;

View File

@@ -31,6 +31,7 @@
namespace TextEditor { namespace TextEditor {
class AssistInterface;
class IAssistProcessor; class IAssistProcessor;
class TEXTEDITOR_EXPORT IAssistProvider : public QObject class TEXTEDITOR_EXPORT IAssistProvider : public QObject
@@ -47,7 +48,7 @@ public:
}; };
virtual RunType runType() const = 0; virtual RunType runType() const = 0;
virtual IAssistProcessor *createProcessor() const = 0; virtual IAssistProcessor *createProcessor(const AssistInterface *assistInterface) const = 0;
}; };
} // TextEditor } // TextEditor

View File

@@ -284,7 +284,7 @@ IAssistProvider::RunType KeywordsCompletionAssistProvider::runType() const
return Synchronous; return Synchronous;
} }
IAssistProcessor *KeywordsCompletionAssistProvider::createProcessor() const IAssistProcessor *KeywordsCompletionAssistProvider::createProcessor(const AssistInterface *) const
{ {
auto processor = new KeywordsCompletionAssistProcessor(m_keyWords); auto processor = new KeywordsCompletionAssistProcessor(m_keyWords);
processor->setSnippetGroup(m_snippetGroup); processor->setSnippetGroup(m_snippetGroup);

View File

@@ -95,7 +95,7 @@ public:
// IAssistProvider interface // IAssistProvider interface
RunType runType() const override; RunType runType() const override;
IAssistProcessor *createProcessor() const override; IAssistProcessor *createProcessor(const AssistInterface *) const override;
private: private:
Keywords m_keyWords; Keywords m_keyWords;