diff --git a/src/libs/extensionsystem/iplugin.cpp b/src/libs/extensionsystem/iplugin.cpp index 42ddd05bf68..a7d35a0c4db 100644 --- a/src/libs/extensionsystem/iplugin.cpp +++ b/src/libs/extensionsystem/iplugin.cpp @@ -3,6 +3,8 @@ #include "iplugin.h" +#include "pluginmanager_p.h" + #include /*! @@ -159,32 +161,16 @@ */ namespace ExtensionSystem { -namespace Internal { - -class IPluginPrivate -{ -public: - QList testCreators; -}; - -} // Internal /*! \internal */ -IPlugin::IPlugin() - : d(new Internal::IPluginPrivate()) -{ -} +IPlugin::IPlugin() = default; /*! \internal */ -IPlugin::~IPlugin() -{ - delete d; - d = nullptr; -} +IPlugin::~IPlugin() = default; bool IPlugin::initialize(const QStringList &arguments, QString *errorString) { @@ -208,15 +194,8 @@ bool IPlugin::initialize(const QStringList &arguments, QString *errorString) void IPlugin::addTestCreator(const TestCreator &creator) { - d->testCreators.append(creator); + Internal::PluginManagerPrivate::addTestCreator(this, creator); } -/*! - \deprecated [10.0] Use \c addTest() instead. -*/ -QVector IPlugin::createTestObjects() const -{ - return Utils::transform(d->testCreators, &TestCreator::operator()); -} } // ExtensionSystem diff --git a/src/libs/extensionsystem/iplugin.h b/src/libs/extensionsystem/iplugin.h index b121611390f..46054a5a18f 100644 --- a/src/libs/extensionsystem/iplugin.h +++ b/src/libs/extensionsystem/iplugin.h @@ -37,9 +37,6 @@ public: const QStringList & /* arguments */) { return nullptr; } - // Deprecated in 10.0, use addTest() - virtual QVector createTestObjects() const; - template void addTest(Args && ...args) { addTestCreator([args...] { return new Test(args...); }); } void addTestCreator(const TestCreator &creator); @@ -51,7 +48,7 @@ signals: void asynchronousShutdownFinished(); private: - Internal::IPluginPrivate *d; + Internal::IPluginPrivate *d = nullptr; // For potential extension. Currently unused. }; } // namespace ExtensionSystem diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 3f9800a9505..a01329e4903 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -1079,6 +1079,15 @@ void PluginManagerPrivate::checkForDuplicatePlugins() } } +static QHash> g_testCreators; + +void PluginManagerPrivate::addTestCreator(IPlugin *plugin, const TestCreator &testCreator) +{ +#ifdef WITH_TESTS + g_testCreators[plugin].append(testCreator); +#endif +} + #ifdef WITH_TESTS using TestPlan = QMap; // Object -> selected test functions @@ -1289,7 +1298,8 @@ void PluginManagerPrivate::startTests() if (!plugin) continue; // plugin not loaded - const QVector testObjects = plugin->createTestObjects(); + const QList testCreators = g_testCreators[plugin]; + const QVector testObjects = Utils::transform(testCreators, &TestCreator::operator()); const QScopeGuard cleanup([&] { qDeleteAll(testObjects); }); const bool hasDuplicateTestObjects = testObjects.size() diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index e39208eddb8..27efbf4c8f3 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -123,6 +123,8 @@ public: static PluginSpec *createSpec(); static PluginSpecPrivate *privateSpec(PluginSpec *spec); + static void addTestCreator(IPlugin *plugin, const std::function &testCreator); + mutable QReadWriteLock m_lock; bool m_isInitializationDone = false;