diff --git a/src/libs/extensionsystem/iplugin.cpp b/src/libs/extensionsystem/iplugin.cpp index 2af49255735..42ddd05bf68 100644 --- a/src/libs/extensionsystem/iplugin.cpp +++ b/src/libs/extensionsystem/iplugin.cpp @@ -161,47 +161,12 @@ namespace ExtensionSystem { namespace Internal { -class ObjectInitializer -{ -public: - ObjectCreator creator; - ObjectDestructor destructor; - ObjectCreationPolicy policy; -}; - class IPluginPrivate { public: - void tryCreateObjects(); - QList testCreators; - - QList objectInitializers; - QList> objectDestructors; - - // For debugging purposes: - QList createdObjects; // Not owned. }; -void IPluginPrivate::tryCreateObjects() -{ - QList unhandledObjectInitializers; - - for (const ObjectInitializer &initializer : std::as_const(objectInitializers)) { - if (!initializer.policy.dependsOn.isEmpty()) { - qWarning("Initialization dependencies are not supported yet"); - unhandledObjectInitializers.append(initializer); - continue; - } - - void *object = initializer.creator(); - createdObjects.append(object); - objectDestructors.append([initializer, object] { initializer.destructor(object); }); - } - - objectInitializers = unhandledObjectInitializers; -} - } // Internal /*! @@ -217,20 +182,10 @@ IPlugin::IPlugin() */ IPlugin::~IPlugin() { - for (const std::function &dtor : std::as_const(d->objectDestructors)) - dtor(); - delete d; d = nullptr; } -void IPlugin::addManagedHelper(const ObjectCreator &creator, - const ObjectDestructor &destructor, - const ObjectCreationPolicy &policy) -{ - d->objectInitializers.append({creator, destructor, policy}); -} - bool IPlugin::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) @@ -239,14 +194,6 @@ bool IPlugin::initialize(const QStringList &arguments, QString *errorString) return true; } -/*! - \internal -*/ -void IPlugin::tryCreateObjects() -{ - d->tryCreateObjects(); -} - /*! Registers a function object that creates a test object with the owner \a creator. diff --git a/src/libs/extensionsystem/iplugin.h b/src/libs/extensionsystem/iplugin.h index 3e477e42e81..5a8fceb3d6e 100644 --- a/src/libs/extensionsystem/iplugin.h +++ b/src/libs/extensionsystem/iplugin.h @@ -5,8 +5,6 @@ #include "extensionsystem_global.h" -#include - #include #include @@ -17,17 +15,6 @@ namespace Internal { class IPluginPrivate; } using TestCreator = std::function; -using ObjectCreator = std::function; -using ObjectDestructor = std::function; - -struct EXTENSIONSYSTEM_EXPORT ObjectCreationPolicy -{ - // Can be empty if nothing depends on it. - Utils::Id id; - // Objects with empty dependencies are created as soon as possible. - QList dependsOn; -}; - class EXTENSIONSYSTEM_EXPORT IPlugin : public QObject { Q_OBJECT @@ -52,7 +39,6 @@ public: // Deprecated in 10.0, use addTest() virtual QVector createTestObjects() const; - virtual void tryCreateObjects(); protected: virtual void initialize() {} @@ -61,17 +47,6 @@ protected: void addTest(Args && ...args) { addTestCreator([args...] { return new Test(args...); }); } void addTestCreator(const TestCreator &creator); - template - void addManaged(const ObjectCreationPolicy &policy = {}) { - addManagedHelper([]() -> void * { return new Type(); }, - [](void *p) { delete static_cast(p); }, - policy); - } - - void addManagedHelper(const ObjectCreator &creator, - const ObjectDestructor &destructor, - const ObjectCreationPolicy &policy); - signals: void asynchronousShutdownFinished(); diff --git a/src/libs/extensionsystem/pluginspec.cpp b/src/libs/extensionsystem/pluginspec.cpp index c633eaad610..bbc4e3541c0 100644 --- a/src/libs/extensionsystem/pluginspec.cpp +++ b/src/libs/extensionsystem/pluginspec.cpp @@ -1124,7 +1124,6 @@ bool PluginSpecPrivate::initializePlugin() hasError = true; return false; } - plugin->tryCreateObjects(); state = PluginSpec::Initialized; return true; } @@ -1151,7 +1150,6 @@ bool PluginSpecPrivate::initializeExtensions() return false; } plugin->extensionsInitialized(); - plugin->tryCreateObjects(); state = PluginSpec::Running; return true; } @@ -1172,7 +1170,6 @@ bool PluginSpecPrivate::delayedInitialize() return false; } const bool res = plugin->delayedInitialize(); - plugin->tryCreateObjects(); return res; } diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp index 8649236e152..7dd53126506 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp @@ -74,6 +74,16 @@ public: * be executed in the build process) */ +class AutotoolsProjectPluginPrivate +{ +public: + AutotoolsBuildConfigurationFactory buildConfigFactory; + MakeStepFactory makeStepFactory; + AutogenStepFactory autogenStepFactory; + ConfigureStepFactory configureStepFactory; + AutoreconfStepFactory autoreconfStepFactory; +}; + class AutotoolsProjectPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT @@ -81,14 +91,10 @@ class AutotoolsProjectPlugin final : public ExtensionSystem::IPlugin void initialize() final { - ProjectManager::registerProjectType(Constants::MAKEFILE_MIMETYPE); - - addManaged(); - addManaged(); - addManaged(); - addManaged(); - addManaged(); + d = std::make_unique(); } + + std::unique_ptr d; }; } // AutotoolsProjectManager::Internal diff --git a/src/plugins/conan/conanplugin.cpp b/src/plugins/conan/conanplugin.cpp index 71c3b0c90e2..0a0d3e20244 100644 --- a/src/plugins/conan/conanplugin.cpp +++ b/src/plugins/conan/conanplugin.cpp @@ -7,16 +7,23 @@ namespace Conan::Internal { +class ConanPluginPrivate +{ +public: + ConanInstallStepFactory conanInstallStepFactory; +}; + class ConanPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Conan.json") -public: - ConanPlugin() + void initialize() { - addManaged(); + d = std::make_unique(); } + + std::unique_ptr d; }; } // Conan::Internal diff --git a/src/plugins/incredibuild/incredibuildplugin.cpp b/src/plugins/incredibuild/incredibuildplugin.cpp index 4e8f572812f..8bff118b66e 100644 --- a/src/plugins/incredibuild/incredibuildplugin.cpp +++ b/src/plugins/incredibuild/incredibuildplugin.cpp @@ -8,17 +8,25 @@ namespace IncrediBuild::Internal { +class IncrediBuildPluginPrivate +{ +public: + BuildConsoleStepFactory buildConsoleStepFactory; + IBConsoleStepFactory ibConsolStepFactory; +}; + class IncrediBuildPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "IncrediBuild.json") public: - IncrediBuildPlugin() + void initialize() { - addManaged(); - addManaged(); + d = std::make_unique(); } + + std::unique_ptr d; }; } // IncrediBuild::Internal diff --git a/src/plugins/vcpkg/vcpkgplugin.cpp b/src/plugins/vcpkg/vcpkgplugin.cpp index 0da92e723c1..2a0153d49ad 100644 --- a/src/plugins/vcpkg/vcpkgplugin.cpp +++ b/src/plugins/vcpkg/vcpkgplugin.cpp @@ -12,6 +12,12 @@ namespace Vcpkg::Internal { +class VcpkgPluginPrivate +{ +public: + VcpkgManifestEditorFactory vcpkgManifestEditorFactory; +}; + class VcpkgPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT @@ -22,12 +28,14 @@ public: { ProjectExplorer::JsonWizardFactory::addWizardPath(":/vcpkg/wizards/"); - addManaged(); + d = std::make_unique(); #ifdef WITH_TESTS addTest(); #endif } + + std::unique_ptr d; }; } // namespace Vcpkg::Internal