summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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);