From 31a55b02477fa0c6b9b9fca7e26ebc6951c3be30 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 21 Feb 2018 10:03:38 +0100 Subject: [PATCH] ExtensionSystem: Remove per-plugin object pools Remove now-unused IPlugin::addAutoReleasedObject and IPlugin:: {add,remove}Object convenience functions that were only forwarding to the global pool. Adjust all related tests. All previous users of these convenience functions are gone, and we do not want to encourage the use of object pool anymore. Plugins that wish to share objects to implement weak dependencies can use the global object pool via ExtensionSystem::PluginManager:: {add,remove}Object directly. Change-Id: Ic668ad5504af76963f6d4c69ae160438efc70db5 Reviewed-by: Eike Ziller --- src/libs/extensionsystem/iplugin.cpp | 62 +++---------------- src/libs/extensionsystem/iplugin.h | 4 -- src/libs/extensionsystem/iplugin_p.h | 5 -- .../circularplugins/plugin1/plugin1.cpp | 7 --- .../circularplugins/plugin1/plugin1.h | 9 +-- .../circularplugins/plugin2/plugin2.cpp | 6 -- .../circularplugins/plugin2/plugin2.h | 9 +-- .../correctplugins1/plugin1/plugin1.cpp | 20 +++--- .../correctplugins1/plugin1/plugin1.h | 14 ++--- .../correctplugins1/plugin2/plugin2.cpp | 20 +++--- .../correctplugins1/plugin2/plugin2.h | 14 ++--- .../correctplugins1/plugin3/plugin3.cpp | 20 +++--- .../correctplugins1/plugin3/plugin3.h | 14 ++--- .../pluginview/plugins/plugin1/plugin1.cpp | 19 +++--- .../pluginview/plugins/plugin1/plugin1.h | 14 ++--- .../pluginview/plugins/plugin2/plugin2.cpp | 19 +++--- .../pluginview/plugins/plugin2/plugin2.h | 14 ++--- .../pluginview/plugins/plugin3/plugin3.cpp | 21 +++---- .../pluginview/plugins/plugin3/plugin3.h | 14 ++--- 19 files changed, 112 insertions(+), 193 deletions(-) diff --git a/src/libs/extensionsystem/iplugin.cpp b/src/libs/extensionsystem/iplugin.cpp index b22814a9e5d..76704be8233 100644 --- a/src/libs/extensionsystem/iplugin.cpp +++ b/src/libs/extensionsystem/iplugin.cpp @@ -61,21 +61,18 @@ \li All plugin libraries are loaded in \e{root-to-leaf} order of the dependency tree. \li All plugins' initialize functions are called in \e{root-to-leaf} order - of the dependency tree. This is a good place to put - objects in the plugin manager's object pool. + of the dependency tree. This is a good time to create objects + needed by other plugins and register them via appropriate core functions + or, if a weak dependency is neceessary to be implemented, to put + them into the global object pool. \li All plugins' extensionsInitialized functions are called in \e{leaf-to-root} order of the dependency tree. At this point, plugins can be sure that all plugins that depend on this plugin have - been initialized completely (implying that they have put - objects in the object pool, if they want that during the - initialization sequence). + been initialized completely and objects these plugins wish to + share have been registered or are available in the global object pool. \endlist If library loading or initialization of a plugin fails, all plugins that depend on that plugin also fail. - - Plugins have access to the plugin manager - (and its object pool) via the PluginManager::instance() - function. */ /*! @@ -102,8 +99,8 @@ In this function, the plugin can assume that plugins that depend on this plugin are fully 'up and running'. It is a good place to - look in the plugin manager's object pool for objects that have - been provided by dependent plugins. + look in the global object pool for objects that have been provided + by weakly dependent plugins. \sa initialize() \sa delayedInitialize() @@ -191,12 +188,8 @@ IPlugin::IPlugin() */ IPlugin::~IPlugin() { - foreach (QObject *obj, d->addedObjectsInReverseOrder) - PluginManager::removeObject(obj); - qDeleteAll(d->addedObjectsInReverseOrder); - d->addedObjectsInReverseOrder.clear(); delete d; - d = 0; + d = nullptr; } /*! @@ -222,40 +215,3 @@ PluginSpec *IPlugin::pluginSpec() const { return d->pluginSpec; } - -/*! - \fn void IPlugin::addObject(QObject *obj) - Convenience function that registers \a obj in the plugin manager's - plugin pool by just calling PluginManager::addObject(). -*/ -void IPlugin::addObject(QObject *obj) -{ - PluginManager::addObject(obj); -} - -/*! - \fn void IPlugin::addAutoReleasedObject(QObject *obj) - Convenience function for registering \a obj in the plugin manager's - plugin pool. Usually, registered objects must be removed from - the object pool and deleted by hand. - Objects added to the pool via addAutoReleasedObject are automatically - removed and deleted in reverse order of registration when - the IPlugin instance is destroyed. - \sa PluginManager::addObject() -*/ -void IPlugin::addAutoReleasedObject(QObject *obj) -{ - d->addedObjectsInReverseOrder.prepend(obj); - PluginManager::addObject(obj); -} - -/*! - \fn void IPlugin::removeObject(QObject *obj) - Convenience function that unregisters \a obj from the plugin manager's - plugin pool by just calling PluginManager::removeObject(). -*/ -void IPlugin::removeObject(QObject *obj) -{ - PluginManager::removeObject(obj); -} - diff --git a/src/libs/extensionsystem/iplugin.h b/src/libs/extensionsystem/iplugin.h index 42b4a564c7a..dd1372130e3 100644 --- a/src/libs/extensionsystem/iplugin.h +++ b/src/libs/extensionsystem/iplugin.h @@ -64,10 +64,6 @@ public: PluginSpec *pluginSpec() const; - void addObject(QObject *obj); - void addAutoReleasedObject(QObject *obj); - void removeObject(QObject *obj); - signals: void asynchronousShutdownFinished(); diff --git a/src/libs/extensionsystem/iplugin_p.h b/src/libs/extensionsystem/iplugin_p.h index 0c3824dd39c..998539d7f00 100644 --- a/src/libs/extensionsystem/iplugin_p.h +++ b/src/libs/extensionsystem/iplugin_p.h @@ -27,11 +27,8 @@ #include "iplugin.h" -#include - namespace ExtensionSystem { -class PluginManager; class PluginSpec; namespace Internal { @@ -40,8 +37,6 @@ class IPluginPrivate { public: PluginSpec *pluginSpec; - - QList addedObjectsInReverseOrder; }; } // namespace Internal diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp index 98cfc0e7d4c..bd8c3fd50ee 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp @@ -25,15 +25,8 @@ #include "plugin1.h" -#include -#include - using namespace Plugin1; -MyPlugin1::MyPlugin1() -{ -} - bool MyPlugin1::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h index 556fc0ba6fc..4fe8e95fc37 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h @@ -27,9 +27,6 @@ #include -#include -#include - #if defined(PLUGIN1_LIBRARY) # define PLUGIN1_EXPORT Q_DECL_EXPORT #else @@ -44,10 +41,10 @@ class PLUGIN1_EXPORT MyPlugin1 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin1.json") public: - MyPlugin1(); + MyPlugin1() = default; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; }; } // namespace Plugin1 diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp index 4d1bb259b74..3e6367dc3d8 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp @@ -25,14 +25,8 @@ #include "plugin2.h" -#include - using namespace Plugin2; -MyPlugin2::MyPlugin2() -{ -} - bool MyPlugin2::initialize(const QStringList &, QString *) { return true; diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h index e5e38e33005..adaf926905e 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h @@ -27,9 +27,6 @@ #include -#include -#include - #if defined(PLUGIN2_LIBRARY) # define PLUGIN2_EXPORT Q_DECL_EXPORT #else @@ -44,10 +41,10 @@ class PLUGIN2_EXPORT MyPlugin2 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin2.json") public: - MyPlugin2(); + MyPlugin2() = default; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; }; } // Plugin2 diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp index 6405c266688..0bb1fc88429 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp @@ -27,22 +27,20 @@ #include -#include -#include - using namespace Plugin1; -MyPlugin1::MyPlugin1() - : initializeCalled(false) +MyPlugin1::~MyPlugin1() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin1::initialize(const QStringList & /*arguments*/, QString *errorString) { initializeCalled = true; - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin1")); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName(QLatin1String("MyPlugin1")); + ExtensionSystem::PluginManager::addObject(object1); bool found2 = false; bool found3 = false; @@ -70,8 +68,8 @@ void MyPlugin1::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin1_running")); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName(QLatin1String("MyPlugin1_running")); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h index 6a0d4c7f09a..a449f279545 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h @@ -27,9 +27,6 @@ #include -#include -#include - #if defined(PLUGIN1_LIBRARY) # define PLUGIN1_EXPORT Q_DECL_EXPORT #else @@ -44,13 +41,16 @@ class PLUGIN1_EXPORT MyPlugin1 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin1.json") public: - MyPlugin1(); + MyPlugin1() = default; + ~MyPlugin1() final; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin1 diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp index cefdec9d101..3a9b60099f2 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp @@ -27,22 +27,20 @@ #include -#include -#include - using namespace Plugin2; -MyPlugin2::MyPlugin2() - : initializeCalled(false) +MyPlugin2::~MyPlugin2() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin2::initialize(const QStringList &, QString *) { initializeCalled = true; - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin2")); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName("MyPlugin2"); + ExtensionSystem::PluginManager::addObject(object1); return true; } @@ -52,8 +50,8 @@ void MyPlugin2::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin2_running")); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName("MyPlugin2_running"); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h index 1a5ff1eb5ce..1cf5d217e99 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h @@ -27,9 +27,6 @@ #include -#include -#include - #if defined(PLUGIN2_LIBRARY) # define PLUGIN2_EXPORT Q_DECL_EXPORT #else @@ -44,13 +41,16 @@ class PLUGIN2_EXPORT MyPlugin2 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin2.json") public: - MyPlugin2(); + MyPlugin2() = default; + ~MyPlugin2() final; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin2 diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp index b5f32ea1c77..a75ee58241e 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp @@ -27,22 +27,20 @@ #include -#include -#include - using namespace Plugin3; -MyPlugin3::MyPlugin3() - : initializeCalled(false) +MyPlugin3::~MyPlugin3() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin3::initialize(const QStringList & /*arguments*/, QString *errorString) { initializeCalled = true; - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin3")); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName(QLatin1String("MyPlugin3")); + ExtensionSystem::PluginManager::addObject(object1); bool found2 = false; foreach (QObject *object, ExtensionSystem::PluginManager::allObjects()) { @@ -61,7 +59,7 @@ void MyPlugin3::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject; - obj->setObjectName(QLatin1String("MyPlugin3_running")); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName(QLatin1String("MyPlugin3_running")); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h index a8bfb4e7b64..bbc1e4d54d0 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h @@ -27,9 +27,6 @@ #include -#include -#include - #if defined(PLUGIN3_LIBRARY) # define PLUGIN3_EXPORT Q_DECL_EXPORT #else @@ -44,13 +41,16 @@ class PLUGIN3_EXPORT MyPlugin3 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin3.json") public: - MyPlugin3(); + MyPlugin3() = default; + ~MyPlugin3() final; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin3 diff --git a/tests/manual/pluginview/plugins/plugin1/plugin1.cpp b/tests/manual/pluginview/plugins/plugin1/plugin1.cpp index f6fd28006b7..5308c8147e3 100644 --- a/tests/manual/pluginview/plugins/plugin1/plugin1.cpp +++ b/tests/manual/pluginview/plugins/plugin1/plugin1.cpp @@ -27,21 +27,20 @@ #include -#include - using namespace Plugin1; -MyPlugin1::MyPlugin1() - : initializeCalled(false) +MyPlugin1::~MyPlugin1() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin1::initialize(const QStringList & /*arguments*/, QString *errorString) { initializeCalled = true; - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin1"); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName("MyPlugin1"); + ExtensionSystem::PluginManager::addObject(object1); bool found2 = false; bool found3 = false; @@ -69,7 +68,7 @@ void MyPlugin1::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin1_running"); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName("MyPlugin1_running"); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/manual/pluginview/plugins/plugin1/plugin1.h b/tests/manual/pluginview/plugins/plugin1/plugin1.h index 5621421aea6..68c819e1187 100644 --- a/tests/manual/pluginview/plugins/plugin1/plugin1.h +++ b/tests/manual/pluginview/plugins/plugin1/plugin1.h @@ -27,9 +27,6 @@ #include -#include -#include - namespace Plugin1 { class MyPlugin1 : public ExtensionSystem::IPlugin @@ -38,13 +35,16 @@ class MyPlugin1 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin1.json") public: - MyPlugin1(); + MyPlugin1() = default; + ~MyPlugin1() final; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin1 diff --git a/tests/manual/pluginview/plugins/plugin2/plugin2.cpp b/tests/manual/pluginview/plugins/plugin2/plugin2.cpp index 72e194fb910..19f63f57a72 100644 --- a/tests/manual/pluginview/plugins/plugin2/plugin2.cpp +++ b/tests/manual/pluginview/plugins/plugin2/plugin2.cpp @@ -27,22 +27,21 @@ #include -#include - using namespace Plugin2; -MyPlugin2::MyPlugin2() - : initializeCalled(false) +MyPlugin2::~MyPlugin2() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin2::initialize(const QStringList & /*arguments*/, QString *errorString) { Q_UNUSED(errorString) initializeCalled = true; - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin2"); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName("MyPlugin2"); + ExtensionSystem::PluginManager::addObject(object1); return true; } @@ -52,7 +51,7 @@ void MyPlugin2::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin2_running"); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName("MyPlugin2_running"); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/manual/pluginview/plugins/plugin2/plugin2.h b/tests/manual/pluginview/plugins/plugin2/plugin2.h index c949b318f4f..df6d1893a2e 100644 --- a/tests/manual/pluginview/plugins/plugin2/plugin2.h +++ b/tests/manual/pluginview/plugins/plugin2/plugin2.h @@ -27,9 +27,6 @@ #include -#include -#include - namespace Plugin2 { class MyPlugin2 : public ExtensionSystem::IPlugin @@ -38,13 +35,16 @@ class MyPlugin2 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin2.json") public: - MyPlugin2(); + MyPlugin2() = default; + ~MyPlugin2() final; - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin2 diff --git a/tests/manual/pluginview/plugins/plugin3/plugin3.cpp b/tests/manual/pluginview/plugins/plugin3/plugin3.cpp index 10e44366fc8..0ba714709f5 100644 --- a/tests/manual/pluginview/plugins/plugin3/plugin3.cpp +++ b/tests/manual/pluginview/plugins/plugin3/plugin3.cpp @@ -27,24 +27,23 @@ #include -#include - using namespace Plugin3; -MyPlugin3::MyPlugin3() - : initializeCalled(false) +MyPlugin3::~MyPlugin3() { + ExtensionSystem::PluginManager::removeObject(object1); + ExtensionSystem::PluginManager::removeObject(object2); } bool MyPlugin3::initialize(const QStringList & /*arguments*/, QString *errorString) { initializeCalled = true; - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin3"); - addAutoReleasedObject(obj); + object1 = new QObject(this); + object1->setObjectName("MyPlugin3"); + ExtensionSystem::PluginManager::addObject(object1); bool found2 = false; - foreach (QObject *object, ExtensionSystem::PluginManager::instance()->allObjects()) { + foreach (QObject *object, ExtensionSystem::PluginManager::allObjects()) { if (object->objectName() == "MyPlugin2") found2 = true; } @@ -60,7 +59,7 @@ void MyPlugin3::extensionsInitialized() if (!initializeCalled) return; // don't do this at home, it's just done here for the test - QObject *obj = new QObject(this); - obj->setObjectName("MyPlugin3_running"); - addAutoReleasedObject(obj); + object2 = new QObject(this); + object2->setObjectName("MyPlugin3_running"); + ExtensionSystem::PluginManager::addObject(object2); } diff --git a/tests/manual/pluginview/plugins/plugin3/plugin3.h b/tests/manual/pluginview/plugins/plugin3/plugin3.h index 0678e698f08..8ce26fe575d 100644 --- a/tests/manual/pluginview/plugins/plugin3/plugin3.h +++ b/tests/manual/pluginview/plugins/plugin3/plugin3.h @@ -27,9 +27,6 @@ #include -#include -#include - namespace Plugin3 { class MyPlugin3 : public ExtensionSystem::IPlugin @@ -38,13 +35,16 @@ class MyPlugin3 : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "plugin" FILE "plugin3.json") public: - MyPlugin3(); + MyPlugin3() = default; + ~MyPlugin3(); - bool initialize(const QStringList &arguments, QString *errorString); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *errorString) final; + void extensionsInitialized() final; private: - bool initializeCalled; + bool initializeCalled = false; + QObject *object1 = nullptr; + QObject *object2 = nullptr; }; } // namespace Plugin3