diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index 4d7dfd47ab3..0005b24baaa 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -190,21 +190,7 @@ QList IWizardFactory::wizardFactoriesOfKind(WizardKind kind) bool IWizardFactory::isAvailable(const QString &platformName) const { - FeatureSet availableFeatures; - - // Implicitly create a feature for each plugin loaded: - QList activeSpecs; - foreach (ExtensionSystem::PluginSpec *s, ExtensionSystem::PluginManager::plugins()) { - if (s->state() == ExtensionSystem::PluginSpec::Running) - activeSpecs << s; - } - - QStringList plugins = Utils::transform(activeSpecs, - [](ExtensionSystem::PluginSpec *s) -> QString { - return QStringLiteral("Plugin.") + s->name(); - }); - foreach (const QString &n, plugins) - availableFeatures |= Feature(Core::Id::fromString(n)); + FeatureSet availableFeatures = pluginFeatures(); foreach (const Core::IFeatureProvider *featureManager, s_providerList) availableFeatures |= featureManager->availableFeatures(platformName); @@ -255,3 +241,18 @@ void IWizardFactory::destroyFeatureProvider() qDeleteAll(s_providerList); s_providerList.clear(); } + +FeatureSet IWizardFactory::pluginFeatures() const +{ + static FeatureSet plugins; + if (plugins.isEmpty()) { + QStringList list; + // Implicitly create a feature for each plugin loaded: + foreach (ExtensionSystem::PluginSpec *s, ExtensionSystem::PluginManager::plugins()) { + if (s->state() == ExtensionSystem::PluginSpec::Running) + list.append(QString::fromLatin1("Plugin.") + s->name()); + } + plugins = FeatureSet::fromStringList(list); + } + return plugins; +} diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index 361aaec2d81..c8d7812dcf6 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -36,6 +36,7 @@ #include #include +#include #include namespace Core { @@ -98,6 +99,9 @@ public: static void registerFeatureProvider(IFeatureProvider *provider); +protected: + Core::FeatureSet pluginFeatures() const; + private: static void destroyFeatureProvider();