diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2014-07-29 16:39:03 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@digia.com> | 2014-07-30 13:50:03 +0200 |
commit | 1da1eec5131718f918f2c9ee7ecdb23a32a97c51 (patch) | |
tree | adbf0440c964f9e0f9fcd89598d664463dddb44d /src | |
parent | b2ea6e1b9e4cd15e3ac1255b9a67ed033eb70f7c (diff) | |
download | qt-creator-1da1eec5131718f918f2c9ee7ecdb23a32a97c51.tar.gz |
IFeatureProvider: Add register method for IFeatureProviders to IWizardFactory
and avoid putting those objects into the object pool.
Change-Id: I46c5ed93a9e80532b3cbd7dba2e52b28b1595aa3
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/coreplugin/coreplugin.cpp | 3 | ||||
-rw-r--r-- | src/plugins/coreplugin/featureprovider.h | 4 | ||||
-rw-r--r-- | src/plugins/coreplugin/iwizardfactory.cpp | 32 | ||||
-rw-r--r-- | src/plugins/coreplugin/iwizardfactory.h | 8 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitfeatureprovider.h | 5 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 2 |
6 files changed, 33 insertions, 21 deletions
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 1457d52b96..8a99a4b2fd 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -35,6 +35,7 @@ #include "mimedatabase.h" #include "modemanager.h" #include "infobar.h" +#include "iwizardfactory.h" #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/editormanager/editormanager.h> @@ -60,6 +61,8 @@ CorePlugin::CorePlugin() : m_editMode(0), m_designMode(0) CorePlugin::~CorePlugin() { + IWizardFactory::destroyFeatureProvider(); + delete m_findPlugin; delete m_locator; diff --git a/src/plugins/coreplugin/featureprovider.h b/src/plugins/coreplugin/featureprovider.h index 5a62a82ac3..9114cb1a45 100644 --- a/src/plugins/coreplugin/featureprovider.h +++ b/src/plugins/coreplugin/featureprovider.h @@ -42,10 +42,8 @@ namespace Core { class CORE_EXPORT FeatureSet; -class CORE_EXPORT IFeatureProvider : public QObject +class CORE_EXPORT IFeatureProvider { - Q_OBJECT - public: IFeatureProvider() {} virtual ~IFeatureProvider() {} diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index 81a071d9f1..4d7dfd47ab 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -35,6 +35,7 @@ #include <extensionsystem/pluginmanager.h> #include <utils/algorithm.h> +#include <utils/qtcassert.h> #include <QStringList> @@ -145,6 +146,10 @@ using namespace Core; +namespace { +static QList<IFeatureProvider *> s_providerList; +} + /* A utility to find all wizards supporting a view mode and matching a predicate */ template <class Predicate> QList<IWizardFactory*> findWizardFactories(Predicate predicate) @@ -201,10 +206,7 @@ bool IWizardFactory::isAvailable(const QString &platformName) const foreach (const QString &n, plugins) availableFeatures |= Feature(Core::Id::fromString(n)); - const QList<Core::IFeatureProvider *> featureManagers - = ExtensionSystem::PluginManager::getObjects<Core::IFeatureProvider>(); - - foreach (const Core::IFeatureProvider *featureManager, featureManagers) + foreach (const Core::IFeatureProvider *featureManager, s_providerList) availableFeatures |= featureManager->availableFeatures(platformName); return availableFeatures.contains(requiredFeatures()); @@ -226,10 +228,7 @@ QStringList IWizardFactory::allAvailablePlatforms() { QStringList platforms; - const QList<Core::IFeatureProvider*> featureManagers = - ExtensionSystem::PluginManager::getObjects<Core::IFeatureProvider>(); - - foreach (const Core::IFeatureProvider *featureManager, featureManagers) + foreach (const Core::IFeatureProvider *featureManager, s_providerList) platforms.append(featureManager->availablePlatforms()); return platforms; @@ -237,13 +236,22 @@ QStringList IWizardFactory::allAvailablePlatforms() QString IWizardFactory::displayNameForPlatform(const QString &string) { - const QList<Core::IFeatureProvider*> featureManagers = - ExtensionSystem::PluginManager::getObjects<Core::IFeatureProvider>(); - - foreach (const Core::IFeatureProvider *featureManager, featureManagers) { + foreach (const Core::IFeatureProvider *featureManager, s_providerList) { QString displayName = featureManager->displayNameForPlatform(string); if (!displayName.isEmpty()) return displayName; } return QString(); } + +void IWizardFactory::registerFeatureProvider(IFeatureProvider *provider) +{ + QTC_ASSERT(!s_providerList.contains(provider), return); + s_providerList.append(provider); +} + +void IWizardFactory::destroyFeatureProvider() +{ + qDeleteAll(s_providerList); + s_providerList.clear(); +} diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index 9269e9f970..361aaec2d8 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -40,6 +40,8 @@ namespace Core { +namespace Internal { class CorePlugin; } + class CORE_EXPORT IWizardFactory : public QObject { @@ -94,7 +96,11 @@ public: static QStringList allAvailablePlatforms(); static QString displayNameForPlatform(const QString &string); + static void registerFeatureProvider(IFeatureProvider *provider); + private: + static void destroyFeatureProvider(); + IWizardFactory::WizardKind m_kind; QIcon m_icon; QString m_description; @@ -105,6 +111,8 @@ private: FeatureSet m_requiredFeatures; WizardFlags m_flags; QString m_descriptionImage; + + friend class Internal::CorePlugin; }; } // namespace Core diff --git a/src/plugins/projectexplorer/kitfeatureprovider.h b/src/plugins/projectexplorer/kitfeatureprovider.h index 4bb3adadcc..788ddedcfa 100644 --- a/src/plugins/projectexplorer/kitfeatureprovider.h +++ b/src/plugins/projectexplorer/kitfeatureprovider.h @@ -38,11 +38,6 @@ namespace Internal { class KitFeatureProvider : public Core::IFeatureProvider { - Q_OBJECT - -public: - - // IFeatureProvider interface public: Core::FeatureSet availableFeatures(const QString &platform) const; QStringList availablePlatforms() const; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index fd11f88598..5ce433f1fd 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -389,7 +389,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er d->m_kitManager = new KitManager; // register before ToolChainManager d->m_toolChainManager = new ToolChainManager; - addAutoReleasedObject(new Internal::KitFeatureProvider); + Core::IWizardFactory::registerFeatureProvider(new Internal::KitFeatureProvider); // Register KitInformation: KitManager::registerKitInformation(new DeviceTypeKitInformation); |