aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-02-21 10:03:38 +0100
committerhjk <hjk@qt.io>2018-02-23 08:57:49 +0000
commit31a55b02477fa0c6b9b9fca7e26ebc6951c3be30 (patch)
treef588d537807b8b54715a834819115aed470b0df4
parent34fec1cad23e2c6fe8ecf907419b231817e27564 (diff)
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 <eike.ziller@qt.io>
-rw-r--r--src/libs/extensionsystem/iplugin.cpp62
-rw-r--r--src/libs/extensionsystem/iplugin.h4
-rw-r--r--src/libs/extensionsystem/iplugin_p.h5
-rw-r--r--tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp7
-rw-r--r--tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h9
-rw-r--r--tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp6
-rw-r--r--tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h9
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp20
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h14
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp20
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h14
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp20
-rw-r--r--tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h14
-rw-r--r--tests/manual/pluginview/plugins/plugin1/plugin1.cpp19
-rw-r--r--tests/manual/pluginview/plugins/plugin1/plugin1.h14
-rw-r--r--tests/manual/pluginview/plugins/plugin2/plugin2.cpp19
-rw-r--r--tests/manual/pluginview/plugins/plugin2/plugin2.h14
-rw-r--r--tests/manual/pluginview/plugins/plugin3/plugin3.cpp21
-rw-r--r--tests/manual/pluginview/plugins/plugin3/plugin3.h14
19 files changed, 112 insertions, 193 deletions
diff --git a/src/libs/extensionsystem/iplugin.cpp b/src/libs/extensionsystem/iplugin.cpp
index b22814a9e5..76704be823 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 42b4a564c7..dd1372130e 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 0c3824dd39..998539d7f0 100644
--- a/src/libs/extensionsystem/iplugin_p.h
+++ b/src/libs/extensionsystem/iplugin_p.h
@@ -27,11 +27,8 @@
#include "iplugin.h"
-#include <QString>
-
namespace ExtensionSystem {
-class PluginManager;
class PluginSpec;
namespace Internal {
@@ -40,8 +37,6 @@ class IPluginPrivate
{
public:
PluginSpec *pluginSpec;
-
- QList<QObject *> addedObjectsInReverseOrder;
};
} // namespace Internal
diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp
index 98cfc0e7d4..bd8c3fd50e 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 <qplugin.h>
-#include <QStringList>
-
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 556fc0ba6f..4fe8e95fc3 100644
--- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h
+++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QtGlobal>
-
#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 4d1bb259b7..3e6367dc3d 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 <qplugin.h>
-
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 e5e38e3300..adaf926905 100644
--- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h
+++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QtGlobal>
-
#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 6405c26668..0bb1fc8842 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp
@@ -27,22 +27,20 @@
#include <extensionsystem/pluginmanager.h>
-#include <qplugin.h>
-#include <QObject>
-
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 6a0d4c7f09..a449f27954 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QtGlobal>
-
#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 cefdec9d10..3a9b60099f 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp
@@ -27,22 +27,20 @@
#include <extensionsystem/pluginmanager.h>
-#include <qplugin.h>
-#include <QObject>
-
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 1a5ff1eb5c..1cf5d217e9 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QtGlobal>
-
#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 b5f32ea1c7..a75ee58241 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp
@@ -27,22 +27,20 @@
#include <extensionsystem/pluginmanager.h>
-#include <qplugin.h>
-#include <QObject>
-
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 a8bfb4e7b6..bbc1e4d54d 100644
--- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h
+++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QtGlobal>
-
#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 f6fd28006b..5308c8147e 100644
--- a/tests/manual/pluginview/plugins/plugin1/plugin1.cpp
+++ b/tests/manual/pluginview/plugins/plugin1/plugin1.cpp
@@ -27,21 +27,20 @@
#include <extensionsystem/pluginmanager.h>
-#include <QObject>
-
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 5621421aea..68c819e118 100644
--- a/tests/manual/pluginview/plugins/plugin1/plugin1.h
+++ b/tests/manual/pluginview/plugins/plugin1/plugin1.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QString>
-
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 72e194fb91..19f63f57a7 100644
--- a/tests/manual/pluginview/plugins/plugin2/plugin2.cpp
+++ b/tests/manual/pluginview/plugins/plugin2/plugin2.cpp
@@ -27,22 +27,21 @@
#include <extensionsystem/pluginmanager.h>
-#include <QObject>
-
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 c949b318f4..df6d1893a2 100644
--- a/tests/manual/pluginview/plugins/plugin2/plugin2.h
+++ b/tests/manual/pluginview/plugins/plugin2/plugin2.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QString>
-
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 10e44366fc..0ba714709f 100644
--- a/tests/manual/pluginview/plugins/plugin3/plugin3.cpp
+++ b/tests/manual/pluginview/plugins/plugin3/plugin3.cpp
@@ -27,24 +27,23 @@
#include <extensionsystem/pluginmanager.h>
-#include <QObject>
-
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 0678e698f0..8ce26fe575 100644
--- a/tests/manual/pluginview/plugins/plugin3/plugin3.h
+++ b/tests/manual/pluginview/plugins/plugin3/plugin3.h
@@ -27,9 +27,6 @@
#include <extensionsystem/iplugin.h>
-#include <QObject>
-#include <QString>
-
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