From 6a3f66af8568497356c05b0ac3d4d0fc2aae07c0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 14 May 2024 11:06:46 +0200 Subject: [PATCH] CppEditor: Introduce central function for registering quickfixes ... and use it to register the InsertVirtualMethods quickfix. The resulting registration pattern encourages the presence of tests and easily allows minimal visibility of the classes involved. Change-Id: I85fba0b983b51d84b6fae1f6fe51b63eed0ee336 Reviewed-by: Christian Stenger --- src/plugins/cppeditor/cppeditorplugin.cpp | 2 -- .../quickfixes/cppinsertvirtualmethods.cpp | 21 +++++++++++++++ .../quickfixes/cppinsertvirtualmethods.h | 16 ++--------- .../cppeditor/quickfixes/cppquickfix.cpp | 27 ++++++++++++++++--- .../cppeditor/quickfixes/cppquickfix.h | 11 ++++++++ .../cppeditor/quickfixes/cppquickfixes.cpp | 4 +-- 6 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp index e87b6d1ea51..9d0b1615830 100644 --- a/src/plugins/cppeditor/cppeditorplugin.cpp +++ b/src/plugins/cppeditor/cppeditorplugin.cpp @@ -43,7 +43,6 @@ #include "functionutils.h" #include "includeutils.h" #include "projectinfo_test.h" -#include "quickfixes/cppinsertvirtualmethods.h" #include "quickfixes/cppquickfix_test.h" #include "symbolsearcher_test.h" #include "typehierarchybuilder_test.h" @@ -514,7 +513,6 @@ void CppEditorPlugin::registerTests() addTest(); addTest(); addTest(); - addTest(); addTest(); addTest(); addTest(); diff --git a/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.cpp b/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.cpp index a9ca1816d89..5407c6b1f54 100644 --- a/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.cpp +++ b/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.cpp @@ -116,6 +116,11 @@ public: QSortFilterProxyModel *classFunctionFilterModel; }; +void registerInsertVirtualMethodsQuickfix() +{ + CppQuickFixFactory::registerFactory(); +} + } // namespace Internal } // namespace CppEditor @@ -1269,6 +1274,17 @@ public: void saveSettings() override { } }; +class InsertVirtualMethodsTest : public QObject +{ + Q_OBJECT + +private slots: + void test_data(); + void test(); + void testImplementationFile(); + void testBaseClassInNamespace(); +}; + void InsertVirtualMethodsTest::test_data() { QTest::addColumn("implementationMode"); @@ -1969,6 +1985,11 @@ InsertVirtualMethods *InsertVirtualMethods::createTestFactory() InsertVirtualMethodsDialog::ModeOutsideClass, true, false)); } +QObject *InsertVirtualMethods::createTest() +{ + return new Tests::InsertVirtualMethodsTest; +} + #endif // WITH_TESTS } // namespace Internal diff --git a/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.h b/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.h index 7116efde1d3..ffb749a71ec 100644 --- a/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.h +++ b/src/plugins/cppeditor/quickfixes/cppinsertvirtualmethods.h @@ -19,6 +19,7 @@ public: void doMatch(const CppQuickFixInterface &interface, TextEditor::QuickFixOperations &result) override; #ifdef WITH_TESTS + static QObject *createTest(); static InsertVirtualMethods *createTestFactory(); #endif @@ -26,20 +27,7 @@ private: InsertVirtualMethodsDialog *m_dialog; }; -#ifdef WITH_TESTS -namespace Tests { -class InsertVirtualMethodsTest : public QObject -{ - Q_OBJECT - -private slots: - void test_data(); - void test(); - void testImplementationFile(); - void testBaseClassInNamespace(); -}; -} // namespace Tests -#endif // WITH_TESTS +void registerInsertVirtualMethodsQuickfix(); } // namespace Internal } // namespace CppEditor diff --git a/src/plugins/cppeditor/quickfixes/cppquickfix.cpp b/src/plugins/cppeditor/quickfixes/cppquickfix.cpp index 4e9f7e3517e..964c0752fc7 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfix.cpp +++ b/src/plugins/cppeditor/quickfixes/cppquickfix.cpp @@ -3,13 +3,33 @@ #include "cppquickfix.h" -#include "../cpprefactoringchanges.h" #include "cppquickfixassistant.h" +#include +#include + using namespace CPlusPlus; using namespace TextEditor; -namespace CppEditor::Internal { +namespace CppEditor { + +static ExtensionSystem::IPlugin *getCppEditor() +{ + using namespace ExtensionSystem; + for (PluginSpec * const spec : PluginManager::plugins()) { + if (spec->name() == "CppEditor") + return spec->plugin(); + } + QTC_ASSERT(false, return nullptr); +} + +ExtensionSystem::IPlugin *CppQuickFixFactory::cppEditor() +{ + static ExtensionSystem::IPlugin *plugin = getCppEditor(); + return plugin; +} + +namespace Internal { const QStringList magicQObjectFunctions() { @@ -23,4 +43,5 @@ CppQuickFixOperation::CppQuickFixOperation(const CppQuickFixInterface &interface CppQuickFixOperation::~CppQuickFixOperation() = default; -} // namespace CppEditor::Internal +} // namespace Internal +} // namespace CppEditor diff --git a/src/plugins/cppeditor/quickfixes/cppquickfix.h b/src/plugins/cppeditor/quickfixes/cppquickfix.h index 738a30e3228..a2fb60a0aaa 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfix.h +++ b/src/plugins/cppeditor/quickfixes/cppquickfix.h @@ -6,6 +6,7 @@ #include "../cppeditor_global.h" #include "cppquickfixassistant.h" +#include #include #include @@ -59,6 +60,14 @@ public: std::optional clangdReplacement() const { return m_clangdReplacement; } void setClangdReplacement(const QVersionNumber &version) { m_clangdReplacement = version; } + template static void registerFactory() + { + new Factory; +#ifdef WITH_TESTS + cppEditor()->addTestCreator(Factory::createTest); +#endif + } + private: /*! Implement this function to doMatch and create the appropriate @@ -67,6 +76,8 @@ private: virtual void doMatch(const Internal::CppQuickFixInterface &interface, QuickFixOperations &result) = 0; + static ExtensionSystem::IPlugin *cppEditor(); + std::optional m_clangdReplacement; }; diff --git a/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp b/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp index 68ade8b5e02..7be42e0b187 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp +++ b/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp @@ -33,8 +33,6 @@ #include #include -#include - #include #include #include @@ -10647,7 +10645,7 @@ void createCppQuickFixes() new AssignToLocalVariable; - new InsertVirtualMethods; + registerInsertVirtualMethodsQuickfix(); new OptimizeForLoop;