summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2014-07-29 16:39:03 +0200
committerTobias Hunger <tobias.hunger@digia.com>2014-07-30 13:50:03 +0200
commit1da1eec5131718f918f2c9ee7ecdb23a32a97c51 (patch)
treeadbf0440c964f9e0f9fcd89598d664463dddb44d /src
parentb2ea6e1b9e4cd15e3ac1255b9a67ed033eb70f7c (diff)
downloadqt-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.cpp3
-rw-r--r--src/plugins/coreplugin/featureprovider.h4
-rw-r--r--src/plugins/coreplugin/iwizardfactory.cpp32
-rw-r--r--src/plugins/coreplugin/iwizardfactory.h8
-rw-r--r--src/plugins/projectexplorer/kitfeatureprovider.h5
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
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);