TextEditor: Split the global QuickFixFactory list

It's only ever used in the filtered Cpp/QmlJs variants. Splitting
the class simplifies the code and avoids re-doing filtering over
and over again.

Also inline QuickFixFactory::matchingOperations() into callers

Change-Id: I730756315f2e0321649259ef229631233b12fbdd
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2017-12-15 15:46:37 +01:00
parent 4ed12d95f8
commit 479ab4ef22
10 changed files with 88 additions and 102 deletions

View File

@@ -43,7 +43,23 @@ namespace QmlJSEditor {
using namespace Internal;
// -----------------------
// QuickFixAssistInterface
// QmlJSQuickFixFactory
// -----------------------
static QList<QmlJSQuickFixFactory *> g_qmlJSQuickFixFactories;
QmlJSQuickFixFactory::QmlJSQuickFixFactory()
{
g_qmlJSQuickFixFactories.append(this);
}
QmlJSQuickFixFactory::~QmlJSQuickFixFactory()
{
g_qmlJSQuickFixFactories.removeOne(this);
}
// -----------------------
// QmlJSQuickFixAssistInterface
// -----------------------
QmlJSQuickFixAssistInterface::QmlJSQuickFixAssistInterface(QmlJSEditorWidget *editor,
AssistReason reason)
@@ -74,12 +90,12 @@ class QmlJSQuickFixAssistProcessor : public IAssistProcessor
IAssistProposal *perform(const AssistInterface *interface) override
{
QSharedPointer<const AssistInterface> assistInterface(interface);
auto qmlJSInterface = assistInterface.staticCast<const QmlJSQuickFixAssistInterface>();
QuickFixOperations quickFixes;
for (QuickFixFactory *factory : QuickFixFactory::allQuickFixFactories())
if (qobject_cast<QmlJSQuickFixFactory *>(factory) != nullptr)
factory->matchingOperations(assistInterface, quickFixes);
for (QmlJSQuickFixFactory *factory : g_qmlJSQuickFixFactories)
factory->match(qmlJSInterface, quickFixes);
return GenericProposal::createProposal(interface, quickFixes);
}