aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/extensionsystem/pluginmanager.h2
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp18
-rw-r--r--src/libs/qmljs/qmljsinterpreter.h7
-rw-r--r--src/libs/qmljs/qmljslink.cpp11
-rw-r--r--src/plugins/android/androidmanager.cpp17
-rw-r--r--src/plugins/android/androidqtsupport.h5
-rw-r--r--src/plugins/coreplugin/basefilewizard.cpp39
-rw-r--r--src/plugins/coreplugin/dialogs/ioptionspage.cpp27
-rw-r--r--src/plugins/coreplugin/dialogs/ioptionspage.h7
-rw-r--r--src/plugins/coreplugin/dialogs/settingsdialog.cpp6
-rw-r--r--src/plugins/coreplugin/diffservice.cpp16
-rw-r--r--src/plugins/coreplugin/diffservice.h3
-rw-r--r--src/plugins/coreplugin/documentmanager.cpp24
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp26
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory.cpp17
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory.h6
-rw-r--r--src/plugins/coreplugin/editormanager/iexternaleditor.cpp22
-rw-r--r--src/plugins/coreplugin/editormanager/iexternaleditor.h5
-rw-r--r--src/plugins/coreplugin/find/findplugin.cpp3
-rw-r--r--src/plugins/coreplugin/find/findtoolbar.cpp6
-rw-r--r--src/plugins/coreplugin/find/ifindfilter.cpp17
-rw-r--r--src/plugins/coreplugin/find/ifindfilter.h5
-rw-r--r--src/plugins/coreplugin/findplaceholder.cpp13
-rw-r--r--src/plugins/coreplugin/findplaceholder.h3
-rw-r--r--src/plugins/coreplugin/idocumentfactory.cpp18
-rw-r--r--src/plugins/coreplugin/idocumentfactory.h5
-rw-r--r--src/plugins/coreplugin/ifilewizardextension.h4
-rw-r--r--src/plugins/coreplugin/inavigationwidgetfactory.cpp13
-rw-r--r--src/plugins/coreplugin/inavigationwidgetfactory.h3
-rw-r--r--src/plugins/coreplugin/ioutputpane.h3
-rw-r--r--src/plugins/coreplugin/iwelcomepage.cpp9
-rw-r--r--src/plugins/coreplugin/iwelcomepage.h2
-rw-r--r--src/plugins/coreplugin/locator/ilocatorfilter.cpp13
-rw-r--r--src/plugins/coreplugin/locator/ilocatorfilter.h6
-rw-r--r--src/plugins/coreplugin/locator/locator.cpp2
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp6
-rw-r--r--src/plugins/coreplugin/outputpanemanager.cpp20
-rw-r--r--src/plugins/cppeditor/cppquickfix.h2
-rw-r--r--src/plugins/cppeditor/cppquickfixassistant.cpp9
-rw-r--r--src/plugins/cppeditor/fileandtokenactions_test.cpp41
-rw-r--r--src/plugins/cpptools/cppcodestylepreferencesfactory.cpp5
-rw-r--r--src/plugins/cpptools/cppcodestylesettingspage.cpp6
-rw-r--r--src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp11
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp58
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h3
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp16
-rw-r--r--src/plugins/projectexplorer/buildstep.h3
-rw-r--r--src/plugins/projectexplorer/buildsteplist.cpp4
-rw-r--r--src/plugins/projectexplorer/buildstepspage.cpp5
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizard.cpp15
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizard.h5
-rw-r--r--src/plugins/projectexplorer/deployconfiguration.cpp21
-rw-r--r--src/plugins/projectexplorer/deployconfiguration.h3
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp6
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp4
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.cpp20
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.h2
-rw-r--r--src/plugins/projectexplorer/ipotentialkit.h4
-rw-r--r--src/plugins/projectexplorer/itaskhandler.h3
-rw-r--r--src/plugins/projectexplorer/kit.cpp4
-rw-r--r--src/plugins/projectexplorer/kitinformation.cpp5
-rw-r--r--src/plugins/projectexplorer/kitinformationconfigwidget.cpp6
-rw-r--r--src/plugins/projectexplorer/kitmanager.cpp4
-rw-r--r--src/plugins/projectexplorer/projectimporter.cpp6
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp21
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h3
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.cpp5
-rw-r--r--src/plugins/projectexplorer/target.cpp9
-rw-r--r--src/plugins/projectexplorer/targetsetuppage.cpp20
-rw-r--r--src/plugins/projectexplorer/taskwindow.cpp18
-rw-r--r--src/plugins/projectexplorer/toolchain.cpp17
-rw-r--r--src/plugins/projectexplorer/toolchain.h5
-rw-r--r--src/plugins/projectexplorer/toolchainmanager.cpp10
-rw-r--r--src/plugins/projectexplorer/toolchainoptionspage.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/propertyprovider.h3
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.cpp18
-rw-r--r--src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp18
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixassist.cpp9
-rw-r--r--src/plugins/qmljstools/qmljsbundleprovider.cpp18
-rw-r--r--src/plugins/qmljstools/qmljsbundleprovider.h7
-rw-r--r--src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp6
-rw-r--r--src/plugins/qmljstools/qmljscodestylesettingspage.cpp7
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp16
-rw-r--r--src/plugins/qtsupport/qtversionfactory.cpp11
-rw-r--r--src/plugins/qtsupport/qtversionfactory.h2
-rw-r--r--src/plugins/qtsupport/qtversionmanager.cpp6
-rw-r--r--src/plugins/texteditor/ioutlinewidget.h7
-rw-r--r--src/plugins/texteditor/outlinefactory.cpp25
-rw-r--r--src/plugins/texteditor/outlinefactory.h5
-rw-r--r--src/plugins/texteditor/quickfix.cpp9
-rw-r--r--src/plugins/texteditor/quickfix.h2
-rw-r--r--src/plugins/texteditor/snippets/snippetprovider.cpp25
-rw-r--r--src/plugins/texteditor/snippets/snippetprovider.h6
-rw-r--r--src/plugins/texteditor/snippets/snippetscollection.cpp4
-rw-r--r--src/plugins/texteditor/snippets/snippetssettingspage.cpp8
-rw-r--r--src/plugins/texteditor/texteditorplugin.cpp2
-rw-r--r--src/plugins/vcsbase/basevcseditorfactory.cpp11
-rw-r--r--src/plugins/welcome/welcomeplugin.cpp3
99 files changed, 696 insertions, 330 deletions
diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h
index 57a911ce7d..b2ff7378ee 100644
--- a/src/libs/extensionsystem/pluginmanager.h
+++ b/src/libs/extensionsystem/pluginmanager.h
@@ -82,6 +82,8 @@ public:
}
return results;
}
+
+ // This is useful for soft dependencies using pure interfaces.
template <typename T> static T *getObject()
{
QReadLocker lock(listLock());
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index d78ada13f7..eaf27d433e 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -204,6 +204,24 @@ QString PropertyInfo::toString() const
return list.join('|');
}
+static QList<CustomImportsProvider *> g_customImportProviders;
+
+CustomImportsProvider::CustomImportsProvider(QObject *parent)
+ : QObject(parent)
+{
+ g_customImportProviders.append(this);
+}
+
+CustomImportsProvider::~CustomImportsProvider()
+{
+ g_customImportProviders.removeOne(this);
+}
+
+const QList<CustomImportsProvider *> CustomImportsProvider::allProviders()
+{
+ return g_customImportProviders;
+}
+
} // namespace QmlJS
CppComponentValue::CppComponentValue(FakeMetaObject::ConstPtr metaObject, const QString &className,
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 806b858f39..fd38b68aba 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -1127,8 +1127,11 @@ class QMLJS_EXPORT CustomImportsProvider : public QObject
{
Q_OBJECT
public:
- explicit CustomImportsProvider(QObject *parent = 0) : QObject(parent) {}
- virtual ~CustomImportsProvider() {}
+ explicit CustomImportsProvider(QObject *parent = nullptr);
+ virtual ~CustomImportsProvider();
+
+ static const QList<CustomImportsProvider *> allProviders();
+
virtual QList<Import> imports(ValueOwner *valueOwner, const Document *context) const = 0;
};
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index eeceb6a786..61cdcd15d2 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -33,8 +33,6 @@
#include "qmljsqrcparser.h"
#include "qmljsconstants.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <QDir>
using namespace LanguageUtils;
@@ -212,12 +210,9 @@ Context::ImportsPerDocument LinkPrivate::linkImports()
Imports *imports = new Imports(valueOwner);
// Add custom imports for the opened document
- if (ExtensionSystem::PluginManager::instance()) {
- auto providers = ExtensionSystem::PluginManager::getObjects<CustomImportsProvider>();
- foreach (const auto &provider, providers)
- foreach (const auto &import, provider->imports(valueOwner, document.data()))
- importCache.insert(ImportCacheKey(import.info), import);
- }
+ for (const auto &provider : CustomImportsProvider::allProviders())
+ foreach (const auto &import, provider->imports(valueOwner, document.data()))
+ importCache.insert(ImportCacheKey(import.info), import);
populateImportedTypes(imports, document);
importsPerDocument.insert(document.data(), QSharedPointer<Imports>(imports));
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index 460c749eba..8b5afb0092 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -41,8 +41,6 @@
#include <coreplugin/messagemanager.h>
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
@@ -92,6 +90,18 @@ static bool openXmlFile(QDomDocument &doc, const Utils::FileName &fileName);
static bool openManifest(ProjectExplorer::Target *target, QDomDocument &doc);
static int parseMinSdk(const QDomElement &manifestElem);
+static QList<AndroidQtSupport *> g_androidQtSupportProviders;
+
+AndroidQtSupport::AndroidQtSupport()
+{
+ g_androidQtSupportProviders.append(this);
+}
+
+AndroidQtSupport::~AndroidQtSupport()
+{
+ g_androidQtSupportProviders.removeOne(this);
+}
+
bool AndroidManager::supportsAndroid(const ProjectExplorer::Kit *kit)
{
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
@@ -457,8 +467,7 @@ bool AndroidManager::checkForQt51Files(Utils::FileName fileName)
AndroidQtSupport *AndroidManager::androidQtSupport(ProjectExplorer::Target *target)
{
- QList<AndroidQtSupport *> providerList = ExtensionSystem::PluginManager::getObjects<AndroidQtSupport>();
- foreach (AndroidQtSupport *provider, providerList) {
+ for (AndroidQtSupport *provider : g_androidQtSupportProviders) {
if (provider->canHandle(target))
return provider;
}
diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h
index 021e5d7cff..df2db99551 100644
--- a/src/plugins/android/androidqtsupport.h
+++ b/src/plugins/android/androidqtsupport.h
@@ -45,6 +45,10 @@ class ANDROID_EXPORT AndroidQtSupport : public QObject
{
Q_OBJECT
+protected:
+ AndroidQtSupport();
+ ~AndroidQtSupport();
+
public:
enum BuildType {
DebugBuild,
@@ -52,7 +56,6 @@ public:
ReleaseBuildSigned
};
-public:
virtual bool canHandle(const ProjectExplorer::Target *target) const = 0;
virtual QStringList soLibSearchPath(const ProjectExplorer::Target *target) const = 0;
virtual QStringList androidExtraLibs(const ProjectExplorer::Target *target) const = 0;
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index a9bf34e451..b252d0de2b 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -28,14 +28,24 @@
#include "basefilewizardfactory.h"
#include "ifilewizardextension.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <QMessageBox>
using namespace Utils;
namespace Core {
+static QList<IFileWizardExtension *> g_fileWizardExtensions;
+
+IFileWizardExtension::IFileWizardExtension()
+{
+ g_fileWizardExtensions.append(this);
+}
+
+IFileWizardExtension::~IFileWizardExtension()
+{
+ g_fileWizardExtensions.removeOne(this);
+}
+
BaseFileWizard::BaseFileWizard(const BaseFileWizardFactory *factory,
const QVariantMap &extraValues,
QWidget *parent) :
@@ -43,19 +53,8 @@ BaseFileWizard::BaseFileWizard(const BaseFileWizardFactory *factory,
m_extraValues(extraValues),
m_factory(factory)
{
- // Compile extension pages, purge out unused ones
- QList<IFileWizardExtension *> extensionList
- = ExtensionSystem::PluginManager::getObjects<IFileWizardExtension>();
-
- for (auto it = extensionList.begin(); it != extensionList.end(); ) {
- const QList<QWizardPage *> extensionPages = (*it)->extensionPages(factory);
- if (extensionPages.empty()) {
- it = extensionList.erase(it);
- } else {
- m_extensionPages += extensionPages;
- ++it;
- }
- }
+ for (IFileWizardExtension *extension : g_fileWizardExtensions)
+ m_extensionPages += extension->extensionPages(factory);
if (!m_extensionPages.empty())
m_firstExtensionPage = m_extensionPages.front();
@@ -67,9 +66,7 @@ void BaseFileWizard::initializePage(int id)
if (page(id) == m_firstExtensionPage) {
generateFileList();
- QList<IFileWizardExtension *> extensionList
- = ExtensionSystem::PluginManager::getObjects<IFileWizardExtension>();
- foreach (IFileWizardExtension *ex, extensionList)
+ for (IFileWizardExtension *ex : g_fileWizardExtensions)
ex->firstExtensionPageShown(m_files, m_extraValues);
}
}
@@ -99,9 +96,7 @@ void BaseFileWizard::accept()
break;
}
- QList<IFileWizardExtension *> extensionList
- = ExtensionSystem::PluginManager::getObjects<IFileWizardExtension>();
- foreach (IFileWizardExtension *ex, extensionList) {
+ for (IFileWizardExtension *ex : g_fileWizardExtensions) {
for (int i = 0; i < m_files.count(); i++) {
ex->applyCodeStyle(&m_files[i]);
}
@@ -116,7 +111,7 @@ void BaseFileWizard::accept()
bool removeOpenProjectAttribute = false;
// Run the extensions
- foreach (IFileWizardExtension *ex, extensionList) {
+ for (IFileWizardExtension *ex : g_fileWizardExtensions) {
bool remove;
if (!ex->processFiles(m_files, &remove, &errorMessage)) {
if (!errorMessage.isEmpty())
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.cpp b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
index 16ac6e9184..49d72dc1d9 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.cpp
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
@@ -135,6 +135,7 @@ QIcon Core::IOptionsPage::categoryIcon() const
Sets \a categoryIcon as the category icon of the options page.
*/
+static QList<Core::IOptionsPage *> g_optionsPages;
/*!
Constructs an options page with the given \a parent.
@@ -143,7 +144,7 @@ Core::IOptionsPage::IOptionsPage(QObject *parent)
: QObject(parent),
m_keywordsInitialized(false)
{
-
+ g_optionsPages.append(this);
}
/*!
@@ -151,6 +152,12 @@ Core::IOptionsPage::IOptionsPage(QObject *parent)
*/
Core::IOptionsPage::~IOptionsPage()
{
+ g_optionsPages.removeOne(this);
+}
+
+const QList<Core::IOptionsPage *> Core::IOptionsPage::allOptionsPages()
+{
+ return g_optionsPages;
}
/*!
@@ -183,6 +190,24 @@ bool Core::IOptionsPage::matches(const QString &searchKeyWord) const
return false;
}
+static QList<Core::IOptionsPageProvider *> g_optionsPagesProviders;
+
+Core::IOptionsPageProvider::IOptionsPageProvider(QObject *parent)
+ : QObject(parent)
+{
+ g_optionsPagesProviders.append(this);
+}
+
+Core::IOptionsPageProvider::~IOptionsPageProvider()
+{
+ g_optionsPagesProviders.removeOne(this);
+}
+
+const QList<Core::IOptionsPageProvider *> Core::IOptionsPageProvider::allOptionsPagesProviders()
+{
+ return g_optionsPagesProviders;
+}
+
QIcon Core::IOptionsPageProvider::categoryIcon() const
{
return QIcon(m_categoryIcon);
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.h b/src/plugins/coreplugin/dialogs/ioptionspage.h
index b726755b7b..16e6d285c0 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.h
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.h
@@ -47,6 +47,8 @@ public:
IOptionsPage(QObject *parent = 0);
virtual ~IOptionsPage();
+ static const QList<IOptionsPage *> allOptionsPages();
+
Id id() const { return m_id; }
QString displayName() const { return m_displayName; }
Id category() const { return m_category; }
@@ -88,7 +90,10 @@ class CORE_EXPORT IOptionsPageProvider : public QObject
Q_OBJECT
public:
- IOptionsPageProvider(QObject *parent = 0) : QObject(parent) {}
+ IOptionsPageProvider(QObject *parent = nullptr);
+ ~IOptionsPageProvider();
+
+ static const QList<IOptionsPageProvider *> allOptionsPagesProviders();
Id category() const { return m_category; }
QString displayCategory() const { return m_displayCategory; }
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index dca59526dd..4d1aea8fd9 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -27,7 +27,6 @@
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <utils/fancylineedit.h>
@@ -69,7 +68,7 @@ bool optionsPageLessThan(const IOptionsPage *p1, const IOptionsPage *p2)
static inline QList<IOptionsPage*> sortedOptionsPages()
{
- QList<IOptionsPage*> rc = ExtensionSystem::PluginManager::getObjects<IOptionsPage>();
+ QList<IOptionsPage*> rc = IOptionsPage::allOptionsPages();
std::stable_sort(rc.begin(), rc.end(), optionsPageLessThan);
return rc;
}
@@ -414,8 +413,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
else
setWindowTitle(tr("Options"));
- m_model->setPages(m_pages,
- ExtensionSystem::PluginManager::getObjects<IOptionsPageProvider>());
+ m_model->setPages(m_pages, IOptionsPageProvider::allOptionsPagesProviders());
m_proxyModel->setSourceModel(m_model);
m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
diff --git a/src/plugins/coreplugin/diffservice.cpp b/src/plugins/coreplugin/diffservice.cpp
index 312d08346b..7feb9aae02 100644
--- a/src/plugins/coreplugin/diffservice.cpp
+++ b/src/plugins/coreplugin/diffservice.cpp
@@ -25,13 +25,23 @@
#include "diffservice.h"
-#include <extensionsystem/pluginmanager.h>
-
namespace Core {
+static DiffService *g_instance = nullptr;
+
+DiffService::DiffService()
+{
+ g_instance = this;
+}
+
+DiffService::~DiffService()
+{
+ g_instance = nullptr;
+}
+
DiffService *DiffService::instance()
{
- return ExtensionSystem::PluginManager::getObject<DiffService>();
+ return g_instance;
}
} // Core
diff --git a/src/plugins/coreplugin/diffservice.h b/src/plugins/coreplugin/diffservice.h
index 72b9881d9f..1c241364dc 100644
--- a/src/plugins/coreplugin/diffservice.h
+++ b/src/plugins/coreplugin/diffservice.h
@@ -38,7 +38,8 @@ class CORE_EXPORT DiffService
public:
static DiffService *instance();
- virtual ~DiffService() {}
+ DiffService();
+ virtual ~DiffService();
virtual void diffFiles(const QString &leftFileName, const QString &rightFileName) = 0;
virtual void diffModifiedFiles(const QStringList &fileNames) = 0;
diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp
index 49cc96566a..0edf3a3966 100644
--- a/src/plugins/coreplugin/documentmanager.cpp
+++ b/src/plugins/coreplugin/documentmanager.cpp
@@ -711,24 +711,26 @@ bool DocumentManager::saveDocument(IDocument *document, const QString &fileName,
return ret;
}
-template<typename FactoryType>
-QSet<QString> filterStrings()
+QString DocumentManager::allDocumentFactoryFiltersString(QString *allFilesFilter = 0)
{
- QSet<QString> filters;
- for (FactoryType *factory : ExtensionSystem::PluginManager::getObjects<FactoryType>()) {
+ QSet<QString> uniqueFilters;
+
+ for (IEditorFactory *factory : IEditorFactory::allEditorFactories()) {
for (const QString &mt : factory->mimeTypes()) {
const QString filter = mimeTypeForName(mt).filterString();
if (!filter.isEmpty())
- filters.insert(filter);
+ uniqueFilters.insert(filter);
+ }
+ }
+
+ for (IDocumentFactory *factory : IDocumentFactory::allDocumentFactories()) {
+ for (const QString &mt : factory->mimeTypes()) {
+ const QString filter = mimeTypeForName(mt).filterString();
+ if (!filter.isEmpty())
+ uniqueFilters.insert(filter);
}
}
- return filters;
-}
-QString DocumentManager::allDocumentFactoryFiltersString(QString *allFilesFilter = 0)
-{
- const QSet<QString> uniqueFilters = filterStrings<IDocumentFactory>()
- + filterStrings<IEditorFactory>();
QStringList filters = uniqueFilters.toList();
filters.sort();
const QString allFiles = Utils::allFilesFilterString();
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 45fc900f18..61d0854cdf 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -186,17 +186,6 @@ static void setFocusToEditorViewAndUnmaximizePanes(EditorView *view)
}
}
-/* For something that has a 'QString id' (IEditorFactory
- * or IExternalEditor), find the one matching a id. */
-template <class EditorFactoryLike>
-EditorFactoryLike *findById(Id id)
-{
- return ExtensionSystem::PluginManager::getObject<EditorFactoryLike>(
- [&id](EditorFactoryLike *efl) {
- return id == efl->id();
- });
-}
-
EditorManagerPrivate::EditorManagerPrivate(QObject *parent) :
QObject(parent),
m_revertToSavedAction(new QAction(EditorManager::tr("Revert to Saved"), this)),
@@ -606,7 +595,9 @@ IEditor *EditorManagerPrivate::openEditor(EditorView *view, const QString &fileN
return 0;
}
if (editorId.isValid()) {
- if (IEditorFactory *factory = findById<IEditorFactory>(editorId)) {
+ IEditorFactory *factory = Utils::findOrDefault(IEditorFactory::allEditorFactories(),
+ Utils::equal(&IEditorFactory::id, editorId));
+ if (factory) {
factories.removeOne(factory);
factories.push_front(factory);
}
@@ -1139,7 +1130,9 @@ EditorManager::EditorFactoryList EditorManagerPrivate::findFactories(Id editorId
factories = EditorManager::editorFactories(mimeType, false);
} else {
// Find by editor id
- if (IEditorFactory *factory = findById<IEditorFactory>(editorId))
+ IEditorFactory *factory = Utils::findOrDefault(IEditorFactory::allEditorFactories(),
+ Utils::equal(&IEditorFactory::id, editorId));
+ if (factory)
factories.push_back(factory);
}
if (factories.empty()) {
@@ -2606,7 +2599,7 @@ EditorManager::EditorFactoryList
EditorManager::editorFactories(const Utils::MimeType &mimeType, bool bestMatchOnly)
{
EditorFactoryList rc;
- const EditorFactoryList allFactories = ExtensionSystem::PluginManager::getObjects<IEditorFactory>();
+ const EditorFactoryList allFactories = IEditorFactory::allEditorFactories();
mimeTypeFactoryLookup(mimeType, allFactories, bestMatchOnly, &rc);
if (debugEditorManager)
qDebug() << Q_FUNC_INFO << mimeType.name() << " returns " << rc;
@@ -2617,7 +2610,7 @@ EditorManager::ExternalEditorList
EditorManager::externalEditors(const Utils::MimeType &mimeType, bool bestMatchOnly)
{
ExternalEditorList rc;
- const ExternalEditorList allEditors = ExtensionSystem::PluginManager::getObjects<IExternalEditor>();
+ const ExternalEditorList allEditors = IExternalEditor::allExternalEditors();
mimeTypeFactoryLookup(mimeType, allEditors, bestMatchOnly, &rc);
if (debugEditorManager)
qDebug() << Q_FUNC_INFO << mimeType.name() << " returns " << rc;
@@ -2692,7 +2685,8 @@ bool EditorManager::isAutoSaveFile(const QString &fileName)
bool EditorManager::openExternalEditor(const QString &fileName, Id editorId)
{
- IExternalEditor *ee = findById<IExternalEditor>(editorId);
+ IExternalEditor *ee = Utils::findOrDefault(IExternalEditor::allExternalEditors(),
+ Utils::equal(&IExternalEditor::id, editorId));
if (!ee)
return false;
QString errorMessage;
diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
index c3abc40b8a..b32b6036bc 100644
--- a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
+++ b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
@@ -27,9 +27,24 @@
#include <utils/qtcassert.h>
-Core::IEditorFactory::IEditorFactory(QObject *parent)
+namespace Core {
+
+static QList<IEditorFactory *> g_editorFactories;
+
+IEditorFactory::IEditorFactory(QObject *parent)
: QObject(parent)
{
+ g_editorFactories.append(this);
+}
+IEditorFactory::~IEditorFactory()
+{
+ g_editorFactories.removeOne(this);
+}
+
+const QList<IEditorFactory *> IEditorFactory::allEditorFactories()
+{
+ return g_editorFactories;
}
+} // Core
diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.h b/src/plugins/coreplugin/editormanager/ieditorfactory.h
index 583001951c..5ed1a83eda 100644
--- a/src/plugins/coreplugin/editormanager/ieditorfactory.h
+++ b/src/plugins/coreplugin/editormanager/ieditorfactory.h
@@ -40,7 +40,11 @@ class CORE_EXPORT IEditorFactory : public QObject
Q_OBJECT
public:
- IEditorFactory(QObject *parent = 0);
+ IEditorFactory(QObject *parent = nullptr);
+ ~IEditorFactory();
+
+ static const QList<IEditorFactory *> allEditorFactories();
+
QString displayName() const { return m_displayName; }
void setDisplayName(const QString &displayName) { m_displayName = displayName; }
diff --git a/src/plugins/coreplugin/editormanager/iexternaleditor.cpp b/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
index 7da7f48444..246003162f 100644
--- a/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
+++ b/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
@@ -25,6 +25,8 @@
#include "iexternaleditor.h"
+namespace Core {
+
/*!
\class Core::IExternalEditor
\mainclass
@@ -50,3 +52,23 @@
Opens the editor with \a fileName. Returns \c true on success or \c false
on failure along with the error in \a errorMessage.
*/
+
+static QList<IExternalEditor *> g_externalEditors;
+
+IExternalEditor::IExternalEditor(QObject *parent)
+ : QObject(parent)
+{
+ g_externalEditors.append(this);
+}
+
+IExternalEditor::~IExternalEditor()
+{
+ g_externalEditors.removeOne(this);
+}
+
+const QList<IExternalEditor *> IExternalEditor::allExternalEditors()
+{
+ return g_externalEditors;
+}
+
+} // Core
diff --git a/src/plugins/coreplugin/editormanager/iexternaleditor.h b/src/plugins/coreplugin/editormanager/iexternaleditor.h
index 24784b1e4a..84d99bcef0 100644
--- a/src/plugins/coreplugin/editormanager/iexternaleditor.h
+++ b/src/plugins/coreplugin/editormanager/iexternaleditor.h
@@ -38,7 +38,10 @@ class CORE_EXPORT IExternalEditor : public QObject
Q_OBJECT
public:
- explicit IExternalEditor(QObject *parent = 0) : QObject(parent) {}
+ explicit IExternalEditor(QObject *parent = nullptr);
+ ~IExternalEditor();
+
+ static const QList<IExternalEditor *> allExternalEditors();
virtual QStringList mimeTypes() const = 0;
virtual Id id() const = 0;
diff --git a/src/plugins/coreplugin/find/findplugin.cpp b/src/plugins/coreplugin/find/findplugin.cpp
index 3ae5ce0e50..c90ba0ba36 100644
--- a/src/plugins/coreplugin/find/findplugin.cpp
+++ b/src/plugins/coreplugin/find/findplugin.cpp
@@ -202,13 +202,12 @@ static QString filterActionName(const IFindFilter *filter)
void FindPrivate::setupFilterMenuItems()
{
- QList<IFindFilter*> findInterfaces = ExtensionSystem::PluginManager::getObjects<IFindFilter>();
Command *cmd;
ActionContainer *mfindadvanced = ActionManager::actionContainer(Constants::M_FIND_ADVANCED);
bool haveEnabledFilters = false;
const Id base("FindFilter.");
- QList<IFindFilter *> sortedFilters = findInterfaces;
+ QList<IFindFilter *> sortedFilters = IFindFilter::allFindFilters();
Utils::sort(sortedFilters, &IFindFilter::displayName);
foreach (IFindFilter *filter, sortedFilters) {
QAction *action = new QAction(filterActionName(filter), this);
diff --git a/src/plugins/coreplugin/find/findtoolbar.cpp b/src/plugins/coreplugin/find/findtoolbar.cpp
index ba619cfa30..a4699dc7b3 100644
--- a/src/plugins/coreplugin/find/findtoolbar.cpp
+++ b/src/plugins/coreplugin/find/findtoolbar.cpp
@@ -36,8 +36,6 @@
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/findplaceholder.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <utils/stylehelper.h>
@@ -727,10 +725,10 @@ void FindToolBar::hideAndResetFocus()
FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const
{
- QList<FindToolBarPlaceHolder*> placeholders = ExtensionSystem::PluginManager::getObjects<FindToolBarPlaceHolder>();
+ const QList<FindToolBarPlaceHolder*> placeholders = FindToolBarPlaceHolder::allFindToolbarPlaceHolders();
QWidget *candidate = QApplication::focusWidget();
while (candidate) {
- foreach (FindToolBarPlaceHolder *ph, placeholders) {
+ for (FindToolBarPlaceHolder *ph : placeholders) {
if (ph->owner() == candidate)
return ph;
}
diff --git a/src/plugins/coreplugin/find/ifindfilter.cpp b/src/plugins/coreplugin/find/ifindfilter.cpp
index d57a16370e..c861d1e0df 100644
--- a/src/plugins/coreplugin/find/ifindfilter.cpp
+++ b/src/plugins/coreplugin/find/ifindfilter.cpp
@@ -227,6 +227,23 @@
namespace Core {
+static QList<IFindFilter *> g_findFilters;
+
+IFindFilter::IFindFilter()
+{
+ g_findFilters.append(this);
+}
+
+IFindFilter::~IFindFilter()
+{
+ g_findFilters.removeOne(this);
+}
+
+const QList<IFindFilter *> IFindFilter::allFindFilters()
+{
+ return g_findFilters;
+}
+
QKeySequence IFindFilter::defaultShortcut() const
{
return QKeySequence();
diff --git a/src/plugins/coreplugin/find/ifindfilter.h b/src/plugins/coreplugin/find/ifindfilter.h
index 9c67c29fc2..efedbf44f9 100644
--- a/src/plugins/coreplugin/find/ifindfilter.h
+++ b/src/plugins/coreplugin/find/ifindfilter.h
@@ -39,9 +39,12 @@ namespace Core {
class CORE_EXPORT IFindFilter : public QObject
{
Q_OBJECT
+
public:
+ IFindFilter();
+ virtual ~IFindFilter();
- virtual ~IFindFilter() {}
+ static const QList<IFindFilter *> allFindFilters();
virtual QString id() const = 0;
virtual QString displayName() const = 0;
diff --git a/src/plugins/coreplugin/findplaceholder.cpp b/src/plugins/coreplugin/findplaceholder.cpp
index a1b32359e2..90ade039d5 100644
--- a/src/plugins/coreplugin/findplaceholder.cpp
+++ b/src/plugins/coreplugin/findplaceholder.cpp
@@ -26,26 +26,26 @@
#include "findplaceholder.h"
#include "find/findtoolbar.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <QVBoxLayout>
using namespace Core;
FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0;
+static QList<FindToolBarPlaceHolder *> g_findToolBarPlaceHolders;
+
FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent)
: QWidget(parent), m_owner(owner), m_subWidget(0), m_lightColored(false)
{
+ g_findToolBarPlaceHolders.append(this);
setLayout(new QVBoxLayout);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
layout()->setMargin(0);
- ExtensionSystem::PluginManager::addObject(this);
}
FindToolBarPlaceHolder::~FindToolBarPlaceHolder()
{
- ExtensionSystem::PluginManager::removeObject(this);
+ g_findToolBarPlaceHolders.removeOne(this);
if (m_subWidget) {
m_subWidget->setVisible(false);
m_subWidget->setParent(0);
@@ -54,6 +54,11 @@ FindToolBarPlaceHolder::~FindToolBarPlaceHolder()
m_current = 0;
}
+const QList<FindToolBarPlaceHolder *> FindToolBarPlaceHolder::allFindToolbarPlaceHolders()
+{
+ return g_findToolBarPlaceHolders;
+}
+
QWidget *FindToolBarPlaceHolder::owner() const
{
return m_owner;
diff --git a/src/plugins/coreplugin/findplaceholder.h b/src/plugins/coreplugin/findplaceholder.h
index 4073354dc1..4029d3e3ab 100644
--- a/src/plugins/coreplugin/findplaceholder.h
+++ b/src/plugins/coreplugin/findplaceholder.h
@@ -39,6 +39,9 @@ class CORE_EXPORT FindToolBarPlaceHolder : public QWidget
public:
explicit FindToolBarPlaceHolder(QWidget *owner, QWidget *parent = 0);
~FindToolBarPlaceHolder();
+
+ static const QList<FindToolBarPlaceHolder *> allFindToolbarPlaceHolders();
+
QWidget *owner() const;
bool isUsedByWidget(QWidget *widget);
diff --git a/src/plugins/coreplugin/idocumentfactory.cpp b/src/plugins/coreplugin/idocumentfactory.cpp
index 4aba09b97a..016d562d8b 100644
--- a/src/plugins/coreplugin/idocumentfactory.cpp
+++ b/src/plugins/coreplugin/idocumentfactory.cpp
@@ -29,6 +29,24 @@
namespace Core {
+static QList<IDocumentFactory *> g_documentFactories;
+
+IDocumentFactory::IDocumentFactory(QObject *parent)
+ : QObject(parent)
+{
+ g_documentFactories.append(this);
+}
+
+IDocumentFactory::~IDocumentFactory()
+{
+ g_documentFactories.removeOne(this);
+}
+
+const QList<IDocumentFactory *> IDocumentFactory::allDocumentFactories()
+{
+ return g_documentFactories;
+}
+
IDocument *IDocumentFactory::open(const QString &filename)
{
QTC_ASSERT(m_opener, return 0);
diff --git a/src/plugins/coreplugin/idocumentfactory.h b/src/plugins/coreplugin/idocumentfactory.h
index 518cb23f1f..461f8aeb4b 100644
--- a/src/plugins/coreplugin/idocumentfactory.h
+++ b/src/plugins/coreplugin/idocumentfactory.h
@@ -41,7 +41,10 @@ class CORE_EXPORT IDocumentFactory : public QObject
Q_OBJECT
public:
- IDocumentFactory(QObject *parent = 0) : QObject(parent) {}
+ IDocumentFactory(QObject *parent = nullptr);
+ ~IDocumentFactory();
+
+ static const QList<IDocumentFactory *> allDocumentFactories();
typedef std::function<IDocument *(const QString &fileName)> Opener;
IDocument *open(const QString &filename);
diff --git a/src/plugins/coreplugin/ifilewizardextension.h b/src/plugins/coreplugin/ifilewizardextension.h
index 2e788eb8c7..494680a87a 100644
--- a/src/plugins/coreplugin/ifilewizardextension.h
+++ b/src/plugins/coreplugin/ifilewizardextension.h
@@ -48,6 +48,10 @@ class CORE_EXPORT IFileWizardExtension : public QObject
{
Q_OBJECT
public:
+ IFileWizardExtension();
+ ~IFileWizardExtension();
+ static QList<IFileWizardExtension *> allFileWizardExtensions();
+
/* Return a list of pages to be added to the Wizard (empty list if not
* applicable). */
virtual QList<QWizardPage *> extensionPages(const IWizardFactory *wizard) = 0;
diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
index 06dfdb43bc..eb7c78993d 100644
--- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp
+++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
@@ -85,12 +85,25 @@
using namespace Core;
+static QList<INavigationWidgetFactory *> g_navigationWidgetFactories;
+
/*!
Creates a \l{Core::NavigationViewFactory}.
*/
INavigationWidgetFactory::INavigationWidgetFactory()
: m_priority(0)
{
+ g_navigationWidgetFactories.append(this);
+}
+
+INavigationWidgetFactory::~INavigationWidgetFactory()
+{
+ g_navigationWidgetFactories.removeOne(this);
+}
+
+const QList<INavigationWidgetFactory *> INavigationWidgetFactory::allNavigationFactories()
+{
+ return g_navigationWidgetFactories;
}
/*!
diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.h b/src/plugins/coreplugin/inavigationwidgetfactory.h
index 2205212232..e569b4b366 100644
--- a/src/plugins/coreplugin/inavigationwidgetfactory.h
+++ b/src/plugins/coreplugin/inavigationwidgetfactory.h
@@ -53,6 +53,9 @@ class CORE_EXPORT INavigationWidgetFactory : public QObject
public:
INavigationWidgetFactory();
+ ~INavigationWidgetFactory();
+
+ static const QList<INavigationWidgetFactory *> allNavigationFactories();
void setDisplayName(const QString &displayName);
void setPriority(int priority);
diff --git a/src/plugins/coreplugin/ioutputpane.h b/src/plugins/coreplugin/ioutputpane.h
index 55d266b406..d4cd8cc4a9 100644
--- a/src/plugins/coreplugin/ioutputpane.h
+++ b/src/plugins/coreplugin/ioutputpane.h
@@ -42,7 +42,8 @@ class CORE_EXPORT IOutputPane : public QObject
Q_OBJECT
public:
- IOutputPane(QObject *parent = 0) : QObject(parent) {}
+ IOutputPane(QObject *parent = nullptr);
+ ~IOutputPane();
virtual QWidget *outputWidget(QWidget *parent) = 0;
virtual QList<QWidget *> toolBarWidgets() const = 0;
diff --git a/src/plugins/coreplugin/iwelcomepage.cpp b/src/plugins/coreplugin/iwelcomepage.cpp
index a99a309ea7..0f93bb1f3b 100644
--- a/src/plugins/coreplugin/iwelcomepage.cpp
+++ b/src/plugins/coreplugin/iwelcomepage.cpp
@@ -41,12 +41,21 @@ using namespace Utils;
namespace Core {
+static QList<IWelcomePage *> g_welcomePages;
+
+const QList<IWelcomePage *> IWelcomePage::allWelcomePages()
+{
+ return g_welcomePages;
+}
+
IWelcomePage::IWelcomePage()
{
+ g_welcomePages.append(this);
}
IWelcomePage::~IWelcomePage()
{
+ g_welcomePages.removeOne(this);
}
static QPalette buttonPalette(bool isActive, bool isCursorInside, bool forText)
diff --git a/src/plugins/coreplugin/iwelcomepage.h b/src/plugins/coreplugin/iwelcomepage.h
index 4732a2893c..7fa43653eb 100644
--- a/src/plugins/coreplugin/iwelcomepage.h
+++ b/src/plugins/coreplugin/iwelcomepage.h
@@ -55,6 +55,8 @@ public:
virtual int priority() const { return 0; }
virtual Core::Id id() const = 0;
virtual QWidget *createWidget() const = 0;
+
+ static const QList<IWelcomePage *> allWelcomePages();
};
class WelcomePageButtonPrivate;
diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.cpp b/src/plugins/coreplugin/locator/ilocatorfilter.cpp
index 1e74741c7e..5ba268b5e3 100644
--- a/src/plugins/coreplugin/locator/ilocatorfilter.cpp
+++ b/src/plugins/coreplugin/locator/ilocatorfilter.cpp
@@ -48,12 +48,25 @@ using namespace Core;
The filter is added to \uicontrol Tools > \uicontrol Locate.
*/
+static QList<ILocatorFilter *> g_locatorFilters;
+
/*!
Constructs a locator filter with \a parent. Call from subclasses.
*/
ILocatorFilter::ILocatorFilter(QObject *parent):
QObject(parent)
{
+ g_locatorFilters.append(this);
+}
+
+ILocatorFilter::~ILocatorFilter()
+{
+ g_locatorFilters.removeOne(this);
+}
+
+const QList<ILocatorFilter *> ILocatorFilter::allLocatorFilters()
+{
+ return g_locatorFilters;
}
/*!
diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h
index 828f21fb59..c6adae975e 100644
--- a/src/plugins/coreplugin/locator/ilocatorfilter.h
+++ b/src/plugins/coreplugin/locator/ilocatorfilter.h
@@ -107,8 +107,10 @@ class CORE_EXPORT ILocatorFilter : public QObject
public:
enum Priority {Highest = 0, High = 1, Medium = 2, Low = 3};
- ILocatorFilter(QObject *parent = 0);
- virtual ~ILocatorFilter() {}
+ ILocatorFilter(QObject *parent = nullptr);
+ virtual ~ILocatorFilter();
+
+ static const QList<ILocatorFilter *> allLocatorFilters();
Id id() const;
Id actionId() const;
diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp
index a3e9df5e45..a4261d571c 100644
--- a/src/plugins/coreplugin/locator/locator.cpp
+++ b/src/plugins/coreplugin/locator/locator.cpp
@@ -139,7 +139,7 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
void Locator::extensionsInitialized()
{
- m_filters = ExtensionSystem::PluginManager::getObjects<ILocatorFilter>();
+ m_filters = ILocatorFilter::allLocatorFilters();
Utils::sort(m_filters, [](const ILocatorFilter *first, const ILocatorFilter *second) -> bool {
if (first->priority() != second->priority())
return first->priority() < second->priority();
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 13d7036d8f..2b97701575 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -341,8 +341,8 @@ void MainWindow::extensionsInitialized()
m_statusBarManager->extensionsInitalized();
OutputPaneManager::instance()->init();
m_vcsManager->extensionsInitialized();
- m_leftNavigationWidget->setFactories(PluginManager::getObjects<INavigationWidgetFactory>());
- m_rightNavigationWidget->setFactories(PluginManager::getObjects<INavigationWidgetFactory>());
+ m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
+ m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
readSettings();
updateContext();
@@ -808,7 +808,7 @@ IDocument *MainWindow::openFiles(const QStringList &fileNames,
ICore::OpenFilesFlags flags,
const QString &workingDirectory)
{
- QList<IDocumentFactory*> documentFactories = PluginManager::getObjects<IDocumentFactory>();
+ const QList<IDocumentFactory*> documentFactories = IDocumentFactory::allDocumentFactories();
IDocument *res = nullptr;
foreach (const QString &fileName, fileNames) {
diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp
index 034271a750..be6938af65 100644
--- a/src/plugins/coreplugin/outputpanemanager.cpp
+++ b/src/plugins/coreplugin/outputpanemanager.cpp
@@ -37,8 +37,6 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <utils/styledbar.h>
@@ -66,6 +64,22 @@
using namespace Utils;
namespace Core {
+
+// OutputPane
+
+static QList<IOutputPane *> g_outputPanes;
+
+IOutputPane::IOutputPane(QObject *parent)
+ : QObject(parent)
+{
+ g_outputPanes.append(this);
+}
+
+IOutputPane::~IOutputPane()
+{
+ g_outputPanes.removeOne(this);
+}
+
namespace Internal {
static char outputPaneSettingsKeyC[] = "OutputPaneVisibility";
@@ -256,7 +270,7 @@ void OutputPaneManager::init()
QFontMetrics titleFm = m_titleLabel->fontMetrics();
int minTitleWidth = 0;
- m_panes = ExtensionSystem::PluginManager::getObjects<IOutputPane>();
+ m_panes = g_outputPanes;
Utils::sort(m_panes, [](IOutputPane *p1, IOutputPane *p2) {
return p1->priorityInStatusBar() > p2->priorityInStatusBar();
});
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index 02c63534c7..fba4b733aa 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -49,8 +49,6 @@ class CPPEDITOR_EXPORT CppQuickFixFactory: public TextEditor::QuickFixFactory
Q_OBJECT
public:
- CppQuickFixFactory() {}
-
void matchingOperations(const TextEditor::QuickFixInterface &interface,
TextEditor::QuickFixOperations &result);
diff --git a/src/plugins/cppeditor/cppquickfixassistant.cpp b/src/plugins/cppeditor/cppquickfixassistant.cpp
index 8ded187d88..349c7111d4 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.cpp
+++ b/src/plugins/cppeditor/cppquickfixassistant.cpp
@@ -34,7 +34,7 @@
#include <cplusplus/ASTPath.h>
-#include <extensionsystem/pluginmanager.h>
+#include <utils/algorithm.h>
#include <utils/qtcassert.h>
using namespace TextEditor;
@@ -59,10 +59,9 @@ IAssistProcessor *CppQuickFixAssistProvider::createProcessor() const
QList<QuickFixFactory *> CppQuickFixAssistProvider::quickFixFactories() const
{
- QList<QuickFixFactory *> results;
- foreach (CppQuickFixFactory *f, ExtensionSystem::PluginManager::getObjects<CppQuickFixFactory>())
- results.append(f);
- return results;
+ return Utils::filtered(QuickFixFactory::allQuickFixFactories(), [](QuickFixFactory *f) {
+ return qobject_cast<CppQuickFixFactory *>(f) != nullptr;
+ });
}
// --------------------------
diff --git a/src/plugins/cppeditor/fileandtokenactions_test.cpp b/src/plugins/cppeditor/fileandtokenactions_test.cpp
index 463172d45b..21b11c7524 100644
--- a/src/plugins/cppeditor/fileandtokenactions_test.cpp
+++ b/src/plugins/cppeditor/fileandtokenactions_test.cpp
@@ -41,7 +41,6 @@
#include <projectexplorer/projectexplorer.h>
#include <texteditor/textdocument.h>
-#include <extensionsystem/pluginmanager.h>
#include <cplusplus/CppDocument.h>
#include <cplusplus/TranslationUnit.h>
#include <utils/algorithm.h>
@@ -448,33 +447,31 @@ void RunAllQuickFixesTokenAction::run(CppEditorWidget *editorWidget)
// Calling editorWidget->invokeAssist(QuickFix) would be not enough
// since we also want to execute the ones that match.
- const QList<CppQuickFixFactory *> quickFixFactories
- = ExtensionSystem::PluginManager::getObjects<CppQuickFixFactory>();
- QVERIFY(!quickFixFactories.isEmpty());
-
CppQuickFixInterface qfi(editorWidget, ExplicitlyInvoked);
// This guard is important since the Quick Fixes expect to get a non-empty path().
if (qfi.path().isEmpty())
return;
- foreach (CppQuickFixFactory *quickFixFactory, quickFixFactories) {
- QuickFixOperations operations;
- // Some Quick Fixes pop up a dialog and are therefore inappropriate for this test.
- // Where possible, use a guiless version of the factory.
- if (qobject_cast<InsertVirtualMethods *>(quickFixFactory)) {
- QScopedPointer<CppQuickFixFactory> factoryProducingGuiLessOperations;
- factoryProducingGuiLessOperations.reset(InsertVirtualMethods::createTestFactory());
- factoryProducingGuiLessOperations->match(qfi, operations);
- } else {
- quickFixFactory->match(qfi, operations);
- }
+ for (QuickFixFactory *quickFixFactory : QuickFixFactory::allQuickFixFactories()) {
+ if (auto cppQuickFixFactory = qobject_cast<CppQuickFixFactory *>(quickFixFactory)) {
+ QuickFixOperations operations;
+ // Some Quick Fixes pop up a dialog and are therefore inappropriate for this test.
+ // Where possible, use a guiless version of the factory.
+ if (qobject_cast<InsertVirtualMethods *>(cppQuickFixFactory)) {
+ QScopedPointer<CppQuickFixFactory> factoryProducingGuiLessOperations;
+ factoryProducingGuiLessOperations.reset(InsertVirtualMethods::createTestFactory());
+ factoryProducingGuiLessOperations->match(qfi, operations);
+ } else {
+ cppQuickFixFactory->match(qfi, operations);
+ }
- foreach (QuickFixOperation::Ptr operation, operations) {
- qDebug() << " -- Performing Quick Fix" << operation->description();
- operation->perform();
- TestActionsTestCase::escape();
- TestActionsTestCase::undoChangesInAllEditorWidgets();
- QApplication::processEvents();
+ foreach (QuickFixOperation::Ptr operation, operations) {
+ qDebug() << " -- Performing Quick Fix" << operation->description();
+ operation->perform();
+ TestActionsTestCase::escape();
+ TestActionsTestCase::undoChangesInAllEditorWidgets();
+ QApplication::processEvents();
+ }
}
}
}
diff --git a/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp
index 633668aabf..599849a302 100644
--- a/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp
+++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp
@@ -123,10 +123,7 @@ TextEditor::Indenter *CppCodeStylePreferencesFactory::createIndenter() const
TextEditor::SnippetProvider *CppCodeStylePreferencesFactory::snippetProvider() const
{
- return ExtensionSystem::PluginManager::getObject<TextEditor::SnippetProvider>(
- [](TextEditor::SnippetProvider *provider) {
- return provider->groupId() == QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
- });
+ return TextEditor::SnippetProvider::snippetProviderForGroupId(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
}
QString CppCodeStylePreferencesFactory::previewText() const
diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp
index 21eadbea4f..5986d7a504 100644
--- a/src/plugins/cpptools/cppcodestylesettingspage.cpp
+++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp
@@ -493,10 +493,8 @@ void CppCodeStylePreferencesWidget::updatePreview()
void CppCodeStylePreferencesWidget::decorateEditors(const FontSettings &fontSettings)
{
- const SnippetProvider *provider = ExtensionSystem::PluginManager::getObject<SnippetProvider>(
- [](SnippetProvider *current) {
- return current->groupId() == QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
- });
+ const SnippetProvider *provider =
+ SnippetProvider::snippetProviderForGroupId(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
foreach (SnippetEditorWidget *editor, m_previews) {
editor->textDocument()->setFontSettings(fontSettings);
diff --git a/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp b/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp
index 809d546732..6d35cdd78f 100644
--- a/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp
+++ b/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp
@@ -30,13 +30,15 @@
#include "../editor/nimindenter.h"
#include <coreplugin/id.h>
+
#include <texteditor/simplecodestylepreferences.h>
#include <texteditor/snippets/snippetprovider.h>
-#include <extensionsystem/pluginmanager.h>
#include <QWidget>
#include <QLayout>
+using namespace TextEditor;
+
namespace Nim {
NimCodeStylePreferencesFactory::NimCodeStylePreferencesFactory()
@@ -71,12 +73,9 @@ TextEditor::Indenter *NimCodeStylePreferencesFactory::createIndenter() const
return new NimIndenter();
}
-TextEditor::SnippetProvider *NimCodeStylePreferencesFactory::snippetProvider() const
+SnippetProvider *NimCodeStylePreferencesFactory::snippetProvider() const
{
- return ExtensionSystem::PluginManager::getObject<TextEditor::SnippetProvider>(
- [](TextEditor::SnippetProvider *provider) {
- return provider->groupId() == Nim::Constants::C_NIMSNIPPETSGROUP_ID;
- });
+ return SnippetProvider::snippetProviderForGroupId(Nim::Constants::C_NIMSNIPPETSGROUP_ID);
}
QString NimCodeStylePreferencesFactory::previewText() const
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 50866d63a4..d0856ad398 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -38,7 +38,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmacroexpander.h>
#include <projectexplorer/target.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <coreplugin/idocument.h>
#include <utils/qtcassert.h>
@@ -318,6 +318,18 @@ void BuildConfiguration::prependCompilerPathToEnvironment(Kit *k, Utils::Environ
// IBuildConfigurationFactory
///
+static QList<IBuildConfigurationFactory *> g_buildConfigurationFactories;
+
+IBuildConfigurationFactory::IBuildConfigurationFactory()
+{
+ g_buildConfigurationFactories.append(this);
+}
+
+IBuildConfigurationFactory::~IBuildConfigurationFactory()
+{
+ g_buildConfigurationFactories.removeOne(this);
+}
+
int IBuildConfigurationFactory::priority(const Target *parent) const
{
return canHandle(parent) ? 0 : -1;
@@ -334,19 +346,15 @@ int IBuildConfigurationFactory::priority(const Kit *k, const QString &projectPat
// restore
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
- QList<IBuildConfigurationFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
- [&parent, map](IBuildConfigurationFactory *factory) {
- return factory->canRestore(parent, map);
- });
-
IBuildConfigurationFactory *factory = 0;
int priority = -1;
- foreach (IBuildConfigurationFactory *i, factories) {
- int iPriority = i->priority(parent);
- if (iPriority > priority) {
- factory = i;
- priority = iPriority;
+ for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
+ if (i->canRestore(parent, map)) {
+ int iPriority = i->priority(parent);
+ if (iPriority > priority) {
+ factory = i;
+ priority = iPriority;
+ }
}
}
return factory;
@@ -355,11 +363,9 @@ IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, con
// setup
IBuildConfigurationFactory *IBuildConfigurationFactory::find(const Kit *k, const QString &projectPath)
{
- QList<IBuildConfigurationFactory *> factories
- = ExtensionSystem::PluginManager::instance()->getObjects<IBuildConfigurationFactory>();
IBuildConfigurationFactory *factory = 0;
int priority = -1;
- foreach (IBuildConfigurationFactory *i, factories) {
+ for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
int iPriority = i->priority(k, projectPath);
if (iPriority > priority) {
factory = i;
@@ -372,11 +378,9 @@ IBuildConfigurationFactory *IBuildConfigurationFactory::find(const Kit *k, const
// create
IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent)
{
- QList<IBuildConfigurationFactory *> factories
- = ExtensionSystem::PluginManager::instance()->getObjects<IBuildConfigurationFactory>();
IBuildConfigurationFactory *factory = 0;
int priority = -1;
- foreach (IBuildConfigurationFactory *i, factories) {
+ for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
int iPriority = i->priority(parent);
if (iPriority > priority) {
factory = i;
@@ -389,19 +393,15 @@ IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent)
// clone
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, BuildConfiguration *bc)
{
- QList<IBuildConfigurationFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
- [&parent, &bc](IBuildConfigurationFactory *factory) {
- return factory->canClone(parent, bc);
- });
-
IBuildConfigurationFactory *factory = 0;
int priority = -1;
- foreach (IBuildConfigurationFactory *i, factories) {
- int iPriority = i->priority(parent);
- if (iPriority > priority) {
- factory = i;
- priority = iPriority;
+ for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
+ if (i->canClone(parent, bc)) {
+ int iPriority = i->priority(parent);
+ if (iPriority > priority) {
+ factory = i;
+ priority = iPriority;
+ }
}
}
return factory;
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 3bc718fd51..c9584e1d9b 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -121,7 +121,8 @@ class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject
Q_OBJECT
protected:
- IBuildConfigurationFactory() = default;
+ IBuildConfigurationFactory();
+ ~IBuildConfigurationFactory();
public:
// The priority is negative if this factory can not create anything for the target.
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index ff2bf2bf3f..265a718f14 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -114,6 +114,8 @@ static const char buildStepEnabledKey[] = "ProjectExplorer.BuildStep.Enabled";
namespace ProjectExplorer {
+static QList<BuildStepFactory *> g_buildStepFactories;
+
BuildStep::BuildStep(BuildStepList *bsl, Core::Id id) :
ProjectConfiguration(bsl, id)
{
@@ -213,7 +215,19 @@ bool BuildStep::enabled() const
}
BuildStepFactory::BuildStepFactory()
-{ }
+{
+ g_buildStepFactories.append(this);
+}
+
+BuildStepFactory::~BuildStepFactory()
+{
+ g_buildStepFactories.removeOne(this);
+}
+
+const QList<BuildStepFactory *> BuildStepFactory::allBuildStepFactories()
+{
+ return g_buildStepFactories;
+}
bool BuildStepFactory::canHandle(BuildStepList *bsl) const
{
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index adc9192060..7a0f6db92a 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -124,6 +124,9 @@ class PROJECTEXPLORER_EXPORT BuildStepFactory : public QObject
public:
BuildStepFactory();
+ ~BuildStepFactory();
+
+ static const QList<BuildStepFactory *> allBuildStepFactories();
BuildStepInfo stepInfo() const;
Core::Id stepId() const;
diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp
index 1d1ffab0d6..d5979a97a6 100644
--- a/src/plugins/projectexplorer/buildsteplist.cpp
+++ b/src/plugins/projectexplorer/buildsteplist.cpp
@@ -32,7 +32,6 @@
#include "projectexplorer.h"
#include "target.h"
-#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h>
using namespace ProjectExplorer;
@@ -108,8 +107,7 @@ bool BuildStepList::fromMap(const QVariantMap &map)
if (!ProjectConfiguration::fromMap(map))
return false;
- const QList<BuildStepFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<BuildStepFactory>();
+ const QList<BuildStepFactory *> factories = BuildStepFactory::allBuildStepFactories();
int maxSteps = map.value(QString::fromLatin1(STEPS_COUNT_KEY), 0).toInt();
for (int i = 0; i < maxSteps; ++i) {
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index d835b3f609..3e05c09b31 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -32,7 +32,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/coreicons.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <utils/qtcassert.h>
#include <utils/detailswidget.h>
#include <utils/hostosinfo.h>
@@ -288,8 +288,7 @@ void BuildStepListWidget::updateAddBuildStepMenu()
{
QMap<QString, QPair<Core::Id, BuildStepFactory *> > map;
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
- QList<BuildStepFactory *> factories = ExtensionSystem::PluginManager::getObjects<BuildStepFactory>();
- foreach (BuildStepFactory *factory, factories) {
+ for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
if (factory->canHandle(m_buildStepList)) {
const BuildStepInfo &info = factory->stepInfo();
if (info.flags & BuildStepInfo::Uncreatable)
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp
index 057b49840d..c9a84889d1 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp
@@ -65,6 +65,19 @@ bool enableLoadTemplateFiles()
namespace ProjectExplorer {
+static QList<ICustomWizardMetaFactory *> g_customWizardMetaFactories;
+
+ICustomWizardMetaFactory::ICustomWizardMetaFactory(const QString &klass, Core::IWizardFactory::WizardKind kind) :
+ m_klass(klass), m_kind(kind)
+{
+ g_customWizardMetaFactories.append(this);
+}
+
+ICustomWizardMetaFactory::~ICustomWizardMetaFactory()
+{
+ g_customWizardMetaFactories.removeOne(this);
+}
+
namespace Internal {
/*!
\class ProjectExplorer::ICustomWizardFactory
@@ -338,7 +351,7 @@ CustomWizard::CustomWizardContextPtr CustomWizard::context() const
CustomWizard *CustomWizard::createWizard(const CustomProjectWizard::CustomWizardParametersPtr &p)
{
- ICustomWizardMetaFactory *factory = ExtensionSystem::PluginManager::getObject<ICustomWizardMetaFactory>(
+ ICustomWizardMetaFactory *factory = Utils::findOrDefault(g_customWizardMetaFactories,
[&p](ICustomWizardMetaFactory *factory) {
return p->klass.isEmpty() ? (p->kind == factory->kind()) : (p->klass == factory->klass());
});
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.h b/src/plugins/projectexplorer/customwizard/customwizard.h
index 619b8470c6..d9fec08044 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.h
+++ b/src/plugins/projectexplorer/customwizard/customwizard.h
@@ -55,9 +55,8 @@ class PROJECTEXPLORER_EXPORT ICustomWizardMetaFactory : public QObject
Q_OBJECT
public:
- ICustomWizardMetaFactory(const QString &klass, Core::IWizardFactory::WizardKind kind) :
- m_klass(klass), m_kind(kind)
- { }
+ ICustomWizardMetaFactory(const QString &klass, Core::IWizardFactory::WizardKind kind);
+ ~ICustomWizardMetaFactory();
virtual CustomWizard *create() const = 0;
QString klass() const { return m_klass; }
diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp
index 1c3967442d..3c4e8ab8f4 100644
--- a/src/plugins/projectexplorer/deployconfiguration.cpp
+++ b/src/plugins/projectexplorer/deployconfiguration.cpp
@@ -32,8 +32,6 @@
#include "projectexplorer.h"
#include "target.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/algorithm.h>
namespace ProjectExplorer {
@@ -142,9 +140,22 @@ bool DeployConfiguration::isActive() const
// DeployConfigurationFactory
///
+static QList<DeployConfigurationFactory *> g_deployConfigurationFactories;
+
DeployConfigurationFactory::DeployConfigurationFactory()
{
setObjectName("DeployConfigurationFactory");
+ g_deployConfigurationFactories.append(this);
+}
+
+DeployConfigurationFactory::~DeployConfigurationFactory()
+{
+ g_deployConfigurationFactories.removeOne(this);
+}
+
+QList<DeployConfigurationFactory *> DeployConfigurationFactory::allDeployConfigurationFactories()
+{
+ return g_deployConfigurationFactories;
}
QList<Core::Id> DeployConfigurationFactory::availableCreationIds(Target *parent) const
@@ -256,7 +267,7 @@ bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &m
DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
- return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
+ return Utils::findOrDefault(g_deployConfigurationFactories,
[&parent, &map](DeployConfigurationFactory *factory) {
return factory->canRestore(parent, map);
});
@@ -264,7 +275,7 @@ DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, con
QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *parent)
{
- return ExtensionSystem::PluginManager::getObjects<DeployConfigurationFactory>(
+ return Utils::filtered(g_deployConfigurationFactories,
[&parent](DeployConfigurationFactory *factory) {
return !factory->availableCreationIds(parent).isEmpty();
});
@@ -272,7 +283,7 @@ QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *par
DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc)
{
- return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
+ return Utils::findOrDefault(g_deployConfigurationFactories,
[&parent, &dc](DeployConfigurationFactory *factory) {
return factory->canClone(parent, dc);
});
diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h
index 4e42e5e00f..56a06ae585 100644
--- a/src/plugins/projectexplorer/deployconfiguration.h
+++ b/src/plugins/projectexplorer/deployconfiguration.h
@@ -78,6 +78,9 @@ class PROJECTEXPLORER_EXPORT DeployConfigurationFactory : public QObject
public:
DeployConfigurationFactory();
+ ~DeployConfigurationFactory();
+
+ static QList<DeployConfigurationFactory *> allDeployConfigurationFactories();
// used to show the list of possible additons to a target, returns a list of types
QList<Core::Id> availableCreationIds(Target *parent) const;
diff --git a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
index 5275df08af..86afd635de 100644
--- a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
@@ -31,8 +31,6 @@
#include <coreplugin/id.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <QPushButton>
namespace ProjectExplorer {
@@ -44,9 +42,7 @@ DeviceFactorySelectionDialog::DeviceFactorySelectionDialog(QWidget *parent) :
ui->setupUi(this);
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start Wizard"));
- const QList<IDeviceFactory *> &factories
- = ExtensionSystem::PluginManager::getObjects<IDeviceFactory>();
- foreach (const IDeviceFactory * const factory, factories) {
+ for (const IDeviceFactory * const factory : IDeviceFactory::allDeviceFactories()) {
if (!factory->canCreate())
continue;
foreach (Core::Id id, factory->availableCreationIds()) {
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
index 2d1e161d2c..900f6d283a 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
@@ -29,7 +29,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <ssh/sshhostkeydatabase.h>
@@ -338,7 +338,7 @@ void DeviceManager::setDefaultDevice(Core::Id id)
const IDeviceFactory *DeviceManager::restoreFactory(const QVariantMap &map)
{
- IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject<IDeviceFactory>(
+ IDeviceFactory *factory = Utils::findOrDefault(IDeviceFactory::allDeviceFactories(),
[&map](IDeviceFactory *factory) {
return factory->canRestore(map);
});
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
index 7be659e450..98a841122e 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
@@ -38,7 +38,7 @@
#include <projectexplorer/projectexplorericons.h>
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <utils/qtcassert.h>
#include <utils/algorithm.h>
@@ -111,10 +111,8 @@ void DeviceSettingsWidget::initGui()
m_ui->configurationComboBox->setModel(m_deviceManagerModel);
m_ui->nameLineEdit->setValidator(m_nameValidator);
- const QList<IDeviceFactory *> &factories
- = ExtensionSystem::PluginManager::getObjects<IDeviceFactory>();
-
- bool hasDeviceFactories = Utils::anyOf(factories, &IDeviceFactory::canCreate);
+ bool hasDeviceFactories = Utils::anyOf(IDeviceFactory::allDeviceFactories(),
+ &IDeviceFactory::canCreate);
m_ui->addConfigButton->setEnabled(hasDeviceFactories);
diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp
index f9cb444c8d..8b02da344e 100644
--- a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp
+++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp
@@ -25,7 +25,7 @@
#include "idevicefactory.h"
-#include <extensionsystem/pluginmanager.h>
+#include <utils/algorithm.h>
namespace ProjectExplorer {
@@ -83,15 +83,29 @@ bool IDeviceFactory::canCreate() const
return !availableCreationIds().isEmpty();
}
+static QList<IDeviceFactory *> g_deviceFactories;
+
IDeviceFactory *IDeviceFactory::find(Core::Id type)
{
- return ExtensionSystem::PluginManager::getObject<IDeviceFactory>(
+ return Utils::findOrDefault(g_deviceFactories,
[&type](IDeviceFactory *factory) {
return factory->availableCreationIds().contains(type);
});
}
IDeviceFactory::IDeviceFactory(QObject *parent) : QObject(parent)
-{ }
+{
+ g_deviceFactories.append(this);
+}
+
+IDeviceFactory::~IDeviceFactory()
+{
+ g_deviceFactories.removeOne(this);
+}
+
+const QList<IDeviceFactory *> IDeviceFactory::allDeviceFactories()
+{
+ return g_deviceFactories;
+}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h
index 7010b190c7..42929ff2d7 100644
--- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h
+++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h
@@ -44,6 +44,8 @@ class PROJECTEXPLORER_EXPORT IDeviceFactory : public QObject
Q_OBJECT
public:
+ ~IDeviceFactory();
+ static const QList<IDeviceFactory *> allDeviceFactories();
virtual QString displayNameForId(Core::Id type) const = 0;
diff --git a/src/plugins/projectexplorer/ipotentialkit.h b/src/plugins/projectexplorer/ipotentialkit.h
index 40237682ae..1d25f7ad47 100644
--- a/src/plugins/projectexplorer/ipotentialkit.h
+++ b/src/plugins/projectexplorer/ipotentialkit.h
@@ -34,7 +34,11 @@ namespace ProjectExplorer {
class PROJECTEXPLORER_EXPORT IPotentialKit : public QObject
{
Q_OBJECT
+
public:
+ IPotentialKit();
+ ~IPotentialKit() override;
+
virtual QString displayName() const = 0;
virtual void executeFromMenu() = 0;
virtual QWidget *createWidget(QWidget *parent) const = 0;
diff --git a/src/plugins/projectexplorer/itaskhandler.h b/src/plugins/projectexplorer/itaskhandler.h
index 9f8692bbf4..89f8eda738 100644
--- a/src/plugins/projectexplorer/itaskhandler.h
+++ b/src/plugins/projectexplorer/itaskhandler.h
@@ -44,7 +44,8 @@ class PROJECTEXPLORER_EXPORT ITaskHandler : public QObject
Q_OBJECT
public:
- virtual ~ITaskHandler() { }
+ ITaskHandler();
+ ~ITaskHandler() override;
virtual bool isDefaultHandler() const { return false; }
virtual bool canHandle(const Task &) const = 0;
diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp
index a4d7b608f6..c0cebbd0c8 100644
--- a/src/plugins/projectexplorer/kit.cpp
+++ b/src/plugins/projectexplorer/kit.cpp
@@ -32,8 +32,6 @@
#include "osparser.h"
#include "projectexplorerconstants.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/icon.h>
@@ -369,7 +367,7 @@ Id Kit::id() const
static QIcon iconForDeviceType(Core::Id deviceType)
{
- const IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject<IDeviceFactory>(
+ const IDeviceFactory *factory = Utils::findOrDefault(IDeviceFactory::allDeviceFactories(),
[&deviceType](const IDeviceFactory *factory) {
return factory->availableCreationIds().contains(deviceType);
});
diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp
index 6a46f957f9..e1c1bf091d 100644
--- a/src/plugins/projectexplorer/kitinformation.cpp
+++ b/src/plugins/projectexplorer/kitinformation.cpp
@@ -25,6 +25,7 @@
#include "kitinformation.h"
+#include "abi.h"
#include "devicesupport/desktopdevice.h"
#include "devicesupport/devicemanager.h"
#include "projectexplorerconstants.h"
@@ -33,8 +34,6 @@
#include "toolchain.h"
#include "toolchainmanager.h"
-#include <extensionsystem/pluginmanager.h>
-#include <projectexplorer/abi.h>
#include <ssh/sshconnection.h>
#include <utils/algorithm.h>
@@ -566,7 +565,7 @@ KitInformation::ItemList DeviceTypeKitInformation::toUserOutput(const Kit *k) co
Core::Id type = deviceTypeId(k);
QString typeDisplayName = tr("Unknown device type");
if (type.isValid()) {
- IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject<IDeviceFactory>(
+ IDeviceFactory *factory = Utils::findOrDefault(IDeviceFactory::allDeviceFactories(),
[&type](IDeviceFactory *factory) {
return factory->availableCreationIds().contains(type);
});
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
index d4eae3df13..0ec65f95db 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
@@ -37,7 +37,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/variablechooser.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <utils/algorithm.h>
#include <utils/fancylineedit.h>
#include <utils/environment.h>
@@ -261,9 +261,7 @@ int ToolChainInformationConfigWidget::indexOf(QComboBox *cb, const ToolChain *tc
DeviceTypeInformationConfigWidget::DeviceTypeInformationConfigWidget(Kit *workingCopy, const KitInformation *ki) :
KitConfigWidget(workingCopy, ki), m_comboBox(new QComboBox)
{
- QList<IDeviceFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<IDeviceFactory>();
- foreach (IDeviceFactory *factory, factories) {
+ for (IDeviceFactory *factory : IDeviceFactory::allDeviceFactories()) {
foreach (Id id, factory->availableCreationIds())
m_comboBox->addItem(factory->displayNameForId(id), id.toSetting());
}
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index d48c9a389e..91b2529e8d 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -34,8 +34,6 @@
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/persistentsettings.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
@@ -560,7 +558,7 @@ QSet<Id> KitFeatureProvider::availablePlatforms() const
QString KitFeatureProvider::displayNameForPlatform(Id id) const
{
- foreach (IDeviceFactory *f, ExtensionSystem::PluginManager::getObjects<IDeviceFactory>()) {
+ for (IDeviceFactory *f : IDeviceFactory::allDeviceFactories()) {
if (f->availableCreationIds().contains(id)) {
const QString dn = f->displayNameForId(id);
QTC_ASSERT(!dn.isEmpty(), continue);
diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp
index 67655decb3..25565015d8 100644
--- a/src/plugins/projectexplorer/projectimporter.cpp
+++ b/src/plugins/projectexplorer/projectimporter.cpp
@@ -37,8 +37,6 @@
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
@@ -374,11 +372,9 @@ bool ProjectImporter::hasKitWithTemporaryData(Core::Id id, const QVariant &data)
static ProjectImporter::ToolChainData
createToolChains(const Utils::FileName &toolChainPath, const Core::Id &language)
{
- const QList<ToolChainFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>();
ProjectImporter::ToolChainData data;
- for (ToolChainFactory *factory : factories) {
+ for (ToolChainFactory *factory : ToolChainFactory::allToolChainFactories()) {
data.tcs = factory->autoDetect(toolChainPath, language);
if (data.tcs.isEmpty())
continue;
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 83cbdd0249..9e08c4bb53 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -36,8 +36,6 @@
#include "session.h"
#include "kitinformation.h"
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/algorithm.h>
#include <utils/checkablemessagebox.h>
#include <utils/outputformatter.h>
@@ -432,9 +430,22 @@ Utils::OutputFormatter *RunConfiguration::createOutputFormatter() const
Translates the types to names to display to the user.
*/
+static QList<IRunConfigurationFactory *> g_runConfigurationFactories;
+
IRunConfigurationFactory::IRunConfigurationFactory(QObject *parent) :
QObject(parent)
{
+ g_runConfigurationFactories.append(this);
+}
+
+IRunConfigurationFactory::~IRunConfigurationFactory()
+{
+ g_runConfigurationFactories.removeOne(this);
+}
+
+const QList<IRunConfigurationFactory *> IRunConfigurationFactory::allRunConfigurationFactories()
+{
+ return g_runConfigurationFactories;
}
QList<RunConfigurationCreationInfo>
@@ -556,7 +567,7 @@ RunConfiguration *IRunConfigurationFactory::clone(Target *parent, RunConfigurati
IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
- return ExtensionSystem::PluginManager::getObject<IRunConfigurationFactory>(
+ return Utils::findOrDefault(g_runConfigurationFactories,
[&parent, &map](IRunConfigurationFactory *factory) {
return factory->canRestore(parent, map);
});
@@ -564,7 +575,7 @@ IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, const Q
IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, RunConfiguration *rc)
{
- return ExtensionSystem::PluginManager::getObject<IRunConfigurationFactory>(
+ return Utils::findOrDefault(g_runConfigurationFactories,
[&parent, rc](IRunConfigurationFactory *factory) {
return factory->canClone(parent, rc);
});
@@ -572,7 +583,7 @@ IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, RunConf
QList<IRunConfigurationFactory *> IRunConfigurationFactory::find(Target *parent)
{
- return ExtensionSystem::PluginManager::getObjects<IRunConfigurationFactory>(
+ return Utils::filtered(g_runConfigurationFactories,
[&parent](IRunConfigurationFactory *factory) {
return !factory->availableCreators(parent).isEmpty();
});
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index cf66ef36a6..68e9aab7bd 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -295,6 +295,9 @@ class PROJECTEXPLORER_EXPORT IRunConfigurationFactory : public QObject
public:
explicit IRunConfigurationFactory(QObject *parent = nullptr);
+ ~IRunConfigurationFactory();
+
+ static const QList<IRunConfigurationFactory *> allRunConfigurationFactories();
enum CreationMode {UserCreate, AutoCreate};
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 5687534756..781f5872be 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -237,11 +237,8 @@ void RunSettingsWidget::aboutToShowAddMenu()
connect(cloneAction, &QAction::triggered,
this, &RunSettingsWidget::cloneRunConfiguration);
}
- const QList<IRunConfigurationFactory *> factories =
- ExtensionSystem::PluginManager::getObjects<IRunConfigurationFactory>();
-
QList<QAction *> menuActions;
- for (IRunConfigurationFactory *factory : factories) {
+ for (IRunConfigurationFactory *factory : IRunConfigurationFactory::allRunConfigurationFactories()) {
const QList<RunConfigurationCreationInfo> items = factory->availableCreators(m_target);
for (const RunConfigurationCreationInfo &item : items) {
auto action = new QAction(item.displayName, m_addRunMenu);
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index 33bd4d83f0..ec7a43e39c 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -87,8 +87,6 @@ class TargetPrivate
public:
TargetPrivate(Kit *k);
- QList<DeployConfigurationFactory *> deployFactories() const;
-
bool m_isEnabled = true;
QIcon m_overlayIcon;
@@ -109,11 +107,6 @@ TargetPrivate::TargetPrivate(Kit *k) :
m_kit(k)
{ }
-QList<DeployConfigurationFactory *> TargetPrivate::deployFactories() const
-{
- return ExtensionSystem::PluginManager::getObjects<DeployConfigurationFactory>();
-}
-
Target::Target(Project *project, Kit *k) :
ProjectConfiguration(project, k->id()),
d(new TargetPrivate(k))
@@ -269,7 +262,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc)
QTC_ASSERT(dc && !d->m_deployConfigurations.contains(dc), return);
Q_ASSERT(dc->target() == this);
- if (d->deployFactories().isEmpty())
+ if (DeployConfigurationFactory::allDeployConfigurationFactories().isEmpty())
return;
// Check that we don't have a configuration with the same displayName
diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp
index 0336d83377..f39582e7f1 100644
--- a/src/plugins/projectexplorer/targetsetuppage.cpp
+++ b/src/plugins/projectexplorer/targetsetuppage.cpp
@@ -36,8 +36,9 @@
#include "targetsetupwidget.h"
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <projectexplorer/ipotentialkit.h>
+
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/wizard.h>
@@ -52,6 +53,19 @@
#include <QCheckBox>
namespace ProjectExplorer {
+
+static QList<IPotentialKit *> g_potentialKits;
+
+IPotentialKit::IPotentialKit()
+{
+ g_potentialKits.append(this);
+}
+
+IPotentialKit::~IPotentialKit()
+{
+ g_potentialKits.removeOne(this);
+}
+
namespace Internal {
static Utils::FileName importDirectory(const QString &projectPath)
{
@@ -183,9 +197,7 @@ TargetSetupPage::TargetSetupPage(QWidget *parent) :
setTitle(tr("Kit Selection"));
- QList<IPotentialKit *> potentialKits =
- ExtensionSystem::PluginManager::instance()->getObjects<IPotentialKit>();
- foreach (IPotentialKit *pk, potentialKits)
+ for (IPotentialKit *pk : g_potentialKits)
if (pk->isEnabled())
m_potentialWidgets.append(pk->createWidget(this));
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index d8337cf6ff..75ba8e6391 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -36,7 +36,7 @@
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/icore.h>
#include <coreplugin/icontext.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <utils/itemviews.h>
@@ -56,6 +56,19 @@ const char SESSION_FILTER_WARNINGS[] = "TaskWindow.IncludeWarnings";
}
namespace ProjectExplorer {
+
+static QList<ITaskHandler *> g_taskHandlers;
+
+ITaskHandler::ITaskHandler()
+{
+ g_taskHandlers.append(this);
+}
+
+ITaskHandler::~ITaskHandler()
+{
+ g_taskHandlers.removeOne(this);
+}
+
namespace Internal {
class TaskView : public Utils::ListView
@@ -321,8 +334,7 @@ void TaskWindow::delayedInitialization()
alreadyDone = true;
- QList<ITaskHandler *> handlers = ExtensionSystem::PluginManager::getObjects<ITaskHandler>();
- foreach (ITaskHandler *h, handlers) {
+ for (ITaskHandler *h : g_taskHandlers) {
if (h->isDefaultHandler() && !d->m_defaultHandler)
d->m_defaultHandler = h;
diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index 53e03e16ad..4cc3ee120d 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -322,6 +322,23 @@ QList<Task> ToolChain::validateKit(const Kit *) const
Used by the tool chain manager to restore user-generated tool chains.
*/
+static QList<ToolChainFactory *> g_toolChainFactories;
+
+ToolChainFactory::ToolChainFactory()
+{
+ g_toolChainFactories.append(this);
+}
+
+ToolChainFactory::~ToolChainFactory()
+{
+ g_toolChainFactories.removeOne(this);
+}
+
+const QList<ToolChainFactory *> ToolChainFactory::allToolChainFactories()
+{
+ return g_toolChainFactories;
+}
+
QList<ToolChain *> ToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
Q_UNUSED(alreadyKnown);
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index 018c99fd7e..10c86c9e92 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -177,6 +177,11 @@ class PROJECTEXPLORER_EXPORT ToolChainFactory : public QObject
Q_OBJECT
public:
+ ToolChainFactory();
+ ~ToolChainFactory();
+
+ static const QList<ToolChainFactory *> allToolChainFactories();
+
QString displayName() const { return m_displayName; }
virtual QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp
index b6c79b8773..87ad2f2b30 100644
--- a/src/plugins/projectexplorer/toolchainmanager.cpp
+++ b/src/plugins/projectexplorer/toolchainmanager.cpp
@@ -31,8 +31,6 @@
#include <coreplugin/icore.h>
-#include <extensionsystem/pluginmanager.h>
-
#include <utils/fileutils.h>
#include <utils/persistentsettings.h>
#include <utils/qtcassert.h>
@@ -139,7 +137,7 @@ static QList<ToolChain *> restoreFromFile(const FileName &fileName)
if (version < 1)
return result;
- QList<ToolChainFactory *> factories = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>();
+ const QList<ToolChainFactory *> factories = ToolChainFactory::allToolChainFactories();
int count = data.value(QLatin1String(TOOLCHAIN_COUNT_KEY), 0).toInt();
for (int i = 0; i < count; ++i) {
@@ -150,7 +148,7 @@ static QList<ToolChain *> restoreFromFile(const FileName &fileName)
const QVariantMap tcMap = data.value(key).toMap();
bool restored = false;
- foreach (ToolChainFactory *f, factories) {
+ for (ToolChainFactory *f : factories) {
if (f->canRestore(tcMap)) {
if (ToolChain *tc = f->restore(tcMap)) {
result.append(tc);
@@ -172,9 +170,7 @@ static QList<ToolChain *> restoreFromFile(const FileName &fileName)
static QList<ToolChain *> autoDetectToolChains(const QList<ToolChain *> alreadyKnownTcs)
{
QList<ToolChain *> result;
- const QList<ToolChainFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>();
- foreach (ToolChainFactory *f, factories)
+ for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories())
result.append(f->autoDetect(alreadyKnownTcs));
// Remove invalid toolchains that might have sneaked in.
diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp
index 2e76c7f3c4..8cfd23655e 100644
--- a/src/plugins/projectexplorer/toolchainoptionspage.cpp
+++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp
@@ -110,7 +110,7 @@ class ToolChainOptionsWidget : public QWidget
public:
ToolChainOptionsWidget()
{
- m_factories = ExtensionSystem::PluginManager::getObjects<ToolChainFactory>(
+ m_factories = Utils::filtered(ToolChainFactory::allToolChainFactories(),
[](ToolChainFactory *factory) { return factory->canCreate();});
m_model.setHeader({ToolChainOptionsPage::tr("Name"), ToolChainOptionsPage::tr("Type")});
diff --git a/src/plugins/qbsprojectmanager/propertyprovider.h b/src/plugins/qbsprojectmanager/propertyprovider.h
index 1d99c1aea5..7d6e94f897 100644
--- a/src/plugins/qbsprojectmanager/propertyprovider.h
+++ b/src/plugins/qbsprojectmanager/propertyprovider.h
@@ -39,6 +39,9 @@ class QBSPROJECTMANAGER_EXPORT PropertyProvider : public QObject
Q_OBJECT
public:
+ PropertyProvider();
+ ~PropertyProvider();
+
virtual bool canHandle(const ProjectExplorer::Kit *k) const = 0;
virtual QVariantMap properties(const ProjectExplorer::Kit *k, const QVariantMap &defaultData) const = 0;
};
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
index ba4775f2c2..ad99c81bf1 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
@@ -34,7 +34,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <projectexplorer/kit.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/projectexplorer.h>
@@ -54,6 +54,19 @@ static QString qtcProfileGroup() { return QLatin1String("preferences.qtcreator.k
static QString qtcProfilePrefix() { return qtcProfileGroup() + sep; }
namespace QbsProjectManager {
+
+static QList<PropertyProvider *> g_propertyProviders;
+
+PropertyProvider::PropertyProvider()
+{
+ g_propertyProviders.append(this);
+}
+
+PropertyProvider::~PropertyProvider()
+{
+ g_propertyProviders.removeOne(this);
+}
+
namespace Internal {
qbs::Settings *QbsManager::m_settings = nullptr;
@@ -200,8 +213,7 @@ void QbsManager::addProfileFromKit(const ProjectExplorer::Kit *k)
// set up properties:
QVariantMap data = m_defaultPropertyProvider->properties(k, QVariantMap());
- QList<PropertyProvider *> providerList = ExtensionSystem::PluginManager::getObjects<PropertyProvider>();
- foreach (PropertyProvider *provider, providerList) {
+ for (PropertyProvider *provider : g_propertyProviders) {
if (provider->canHandle(k))
data = provider->properties(k, data);
}
diff --git a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp b/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp
index 3acc165550..12b3e9a13b 100644
--- a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp
@@ -25,7 +25,7 @@
#include "qmakerunconfigurationfactory.h"
-#include <extensionsystem/pluginmanager.h>
+using namespace ProjectExplorer;
namespace QmakeProjectManager {
@@ -35,13 +35,15 @@ QmakeRunConfigurationFactory::QmakeRunConfigurationFactory(QObject *parent) :
QmakeRunConfigurationFactory *QmakeRunConfigurationFactory::find(ProjectExplorer::Target *t)
{
- if (!t)
- return nullptr;
-
- return ExtensionSystem::PluginManager::getObject<QmakeRunConfigurationFactory>(
- [&t](QmakeRunConfigurationFactory *factory) {
- return factory->canHandle(t);
- });
+ if (t) {
+ for (auto factory : IRunConfigurationFactory::allRunConfigurationFactories()) {
+ if (auto qmakeFactory = qobject_cast<QmakeRunConfigurationFactory *>(factory)) {
+ if (qmakeFactory->canHandle(t))
+ return qmakeFactory;
+ }
+ }
+ }
+ return nullptr;
}
} // namespace QmakeProjectManager
diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.cpp b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
index 1138a1341e..7f7160d6ea 100644
--- a/src/plugins/qmljseditor/qmljsquickfixassist.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
@@ -30,7 +30,7 @@
//temp
#include "qmljsquickfix.h"
-#include <extensionsystem/pluginmanager.h>
+#include <utils/algorithm.h>
using namespace QmlJSTools;
using namespace TextEditor;
@@ -85,10 +85,9 @@ IAssistProcessor *QmlJSQuickFixAssistProvider::createProcessor() const
QList<QuickFixFactory *> QmlJSQuickFixAssistProvider::quickFixFactories() const
{
- QList<QuickFixFactory *> results;
- foreach (QmlJSQuickFixFactory *f, ExtensionSystem::PluginManager::getObjects<QmlJSQuickFixFactory>())
- results.append(f);
- return results;
+ return Utils::filtered(QuickFixFactory::allQuickFixFactories(), [](QuickFixFactory *f) {
+ return qobject_cast<QmlJSQuickFixFactory *>(f) != nullptr;
+ });
}
} // namespace QmlJSEditor
diff --git a/src/plugins/qmljstools/qmljsbundleprovider.cpp b/src/plugins/qmljstools/qmljsbundleprovider.cpp
index 10f81a9db3..8fa30ae870 100644
--- a/src/plugins/qmljstools/qmljsbundleprovider.cpp
+++ b/src/plugins/qmljstools/qmljsbundleprovider.cpp
@@ -176,4 +176,22 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
}
}
+static QList<IBundleProvider *> g_bundleProviders;
+
+IBundleProvider::IBundleProvider(QObject *parent)
+ : QObject(parent)
+{
+ g_bundleProviders.append(this);
+}
+
+IBundleProvider::~IBundleProvider()
+{
+ g_bundleProviders.removeOne(this);
+}
+
+const QList<IBundleProvider *> IBundleProvider::allBundleProviders()
+{
+ return g_bundleProviders;
+}
+
} // end namespace QmlJSTools
diff --git a/src/plugins/qmljstools/qmljsbundleprovider.h b/src/plugins/qmljstools/qmljsbundleprovider.h
index d3b01bbb22..8fc2258c69 100644
--- a/src/plugins/qmljstools/qmljsbundleprovider.h
+++ b/src/plugins/qmljstools/qmljsbundleprovider.h
@@ -47,9 +47,10 @@ class QMLJSTOOLS_EXPORT IBundleProvider : public QObject
{
Q_OBJECT
public:
- explicit IBundleProvider(QObject *parent = 0)
- : QObject(parent)
- { }
+ explicit IBundleProvider(QObject *parent = 0);
+ ~IBundleProvider();
+
+ static const QList<IBundleProvider *> allBundleProviders();
virtual void mergeBundlesForKit(ProjectExplorer::Kit *kit, QmlJS::QmlLanguageBundles &bundles
, const QHash<QString,QString> &replacements) = 0;
diff --git a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp
index 60c1cad38f..42a42d4d1f 100644
--- a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp
+++ b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp
@@ -88,10 +88,8 @@ TextEditor::Indenter *QmlJSCodeStylePreferencesFactory::createIndenter() const
TextEditor::SnippetProvider *QmlJSCodeStylePreferencesFactory::snippetProvider() const
{
- return ExtensionSystem::PluginManager::getObject<TextEditor::SnippetProvider>(
- [](TextEditor::SnippetProvider *provider) {
- return provider->groupId() == QLatin1String(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
- });
+ return TextEditor::SnippetProvider::snippetProviderForGroupId
+ (QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
}
QString QmlJSCodeStylePreferencesFactory::previewText() const
diff --git a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp
index 9067f1cac8..04bbb007e5 100644
--- a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp
+++ b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp
@@ -80,13 +80,10 @@ void QmlJSCodeStylePreferencesWidget::setPreferences(ICodeStylePreferences *pref
updatePreview();
}
-
void QmlJSCodeStylePreferencesWidget::decorateEditor(const FontSettings &fontSettings)
{
- const SnippetProvider *provider = ExtensionSystem::PluginManager::getObject<SnippetProvider>(
- [](SnippetProvider *current) {
- return current->groupId() == QLatin1String(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
- });
+ const SnippetProvider *provider =
+ SnippetProvider::snippetProviderForGroupId(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
m_ui->previewTextEdit->textDocument()->setFontSettings(fontSettings);
if (provider)
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index 4da912cc90..a493ca2e94 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -33,8 +33,9 @@
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
+
#include <cpptools/cppmodelmanager.h>
-#include <extensionsystem/pluginmanager.h>
+
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -152,13 +153,9 @@ void setupProjectInfoQmlBundles(ModelManagerInterface::ProjectInfo &projectInfo)
replacements.insert(QLatin1String("$(QT_INSTALL_IMPORTS)"), projectInfo.qtImportsPath);
replacements.insert(QLatin1String("$(QT_INSTALL_QML)"), projectInfo.qtQmlPath);
- QList<IBundleProvider *> bundleProviders =
- ExtensionSystem::PluginManager::getObjects<IBundleProvider>();
+ for (IBundleProvider *bp : IBundleProvider::allBundleProviders())
+ bp->mergeBundlesForKit(activeKit, projectInfo.activeBundle, replacements);
- foreach (IBundleProvider *bp, bundleProviders) {
- if (bp)
- bp->mergeBundlesForKit(activeKit, projectInfo.activeBundle, replacements);
- }
projectInfo.extendedBundle = projectInfo.activeBundle;
if (projectInfo.project) {
@@ -167,9 +164,8 @@ void setupProjectInfoQmlBundles(ModelManagerInterface::ProjectInfo &projectInfo)
currentKits.insert(t->kit());
currentKits.remove(activeKit);
foreach (Kit *kit, currentKits) {
- foreach (IBundleProvider *bp, bundleProviders)
- if (bp)
- bp->mergeBundlesForKit(kit, projectInfo.extendedBundle, replacements);
+ for (IBundleProvider *bp : IBundleProvider::allBundleProviders())
+ bp->mergeBundlesForKit(kit, projectInfo.extendedBundle, replacements);
}
}
}
diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp
index dc23ea981f..ebc8ae36ee 100644
--- a/src/plugins/qtsupport/qtversionfactory.cpp
+++ b/src/plugins/qtsupport/qtversionfactory.cpp
@@ -36,13 +36,22 @@
using namespace QtSupport;
using namespace QtSupport::Internal;
+static QList<QtVersionFactory *> g_qtVersionFactories;
+
QtVersionFactory::QtVersionFactory(QObject *parent) :
QObject(parent)
{
+ g_qtVersionFactories.append(this);
}
QtVersionFactory::~QtVersionFactory()
{
+ g_qtVersionFactories.removeOne(this);
+}
+
+const QList<QtVersionFactory *> QtVersionFactory::allQtVersionFactories()
+{
+ return g_qtVersionFactories;
}
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error)
@@ -62,7 +71,7 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN
ProFileEvaluator evaluator(&globals, &parser, &vfs, &msgHandler);
evaluator.loadNamedSpec(mkspec.toString(), false);
- QList<QtVersionFactory *> factories = ExtensionSystem::PluginManager::getObjects<QtVersionFactory>();
+ QList<QtVersionFactory *> factories = g_qtVersionFactories;
Utils::sort(factories, [](const QtVersionFactory *l, const QtVersionFactory *r) {
return l->priority() > r->priority();
});
diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h
index d789717408..c54b2c3745 100644
--- a/src/plugins/qtsupport/qtversionfactory.h
+++ b/src/plugins/qtsupport/qtversionfactory.h
@@ -49,6 +49,8 @@ public:
explicit QtVersionFactory(QObject *parent = 0);
~QtVersionFactory();
+ static const QList<QtVersionFactory *> allQtVersionFactories();
+
virtual bool canRestore(const QString &type) = 0;
virtual BaseQtVersion *restore(const QString &type, const QVariantMap &data) = 0;
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 321fd5895d..621cfa6878 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -179,7 +179,7 @@ static bool restoreQtVersions()
m_writer = new PersistentSettingsWriter(settingsFileName(QLatin1String(QTVERSION_FILENAME)),
QLatin1String("QtCreatorQtVersions"));
- QList<QtVersionFactory *> factories = ExtensionSystem::PluginManager::getObjects<QtVersionFactory>();
+ const QList<QtVersionFactory *> factories = QtVersionFactory::allQtVersionFactories();
PersistentSettingsReader reader;
FileName filename = settingsFileName(QLatin1String(QTVERSION_FILENAME));
@@ -208,7 +208,7 @@ static bool restoreQtVersions()
const QString type = qtversionMap.value(QLatin1String(QTVERSION_TYPE_KEY)).toString();
bool restored = false;
- foreach (QtVersionFactory *f, factories) {
+ for (QtVersionFactory *f : factories) {
if (f->canRestore(type)) {
if (BaseQtVersion *qtv = f->restore(type, qtversionMap)) {
if (m_versions.contains(qtv->uniqueId())) {
@@ -249,7 +249,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
QList<int> removed;
QList<int> changed;
- QList<QtVersionFactory *> factories = ExtensionSystem::PluginManager::getObjects<QtVersionFactory>();
+ const QList<QtVersionFactory *> factories = QtVersionFactory::allQtVersionFactories();
PersistentSettingsReader reader;
QVariantMap data;
if (reader.load(path))
diff --git a/src/plugins/texteditor/ioutlinewidget.h b/src/plugins/texteditor/ioutlinewidget.h
index d6aa32fa03..7ea654441f 100644
--- a/src/plugins/texteditor/ioutlinewidget.h
+++ b/src/plugins/texteditor/ioutlinewidget.h
@@ -46,9 +46,14 @@ public:
virtual QVariantMap settings() const { return QVariantMap(); }
};
-class TEXTEDITOR_EXPORT IOutlineWidgetFactory : public QObject {
+class TEXTEDITOR_EXPORT IOutlineWidgetFactory : public QObject
+{
Q_OBJECT
+
public:
+ IOutlineWidgetFactory();
+ ~IOutlineWidgetFactory() override;
+
virtual bool supportsEditor(Core::IEditor *editor) const = 0;
virtual IOutlineWidget *createWidget(Core::IEditor *editor) = 0;
};
diff --git a/src/plugins/texteditor/outlinefactory.cpp b/src/plugins/texteditor/outlinefactory.cpp
index 0b04789099..76dd86717e 100644
--- a/src/plugins/texteditor/outlinefactory.cpp
+++ b/src/plugins/texteditor/outlinefactory.cpp
@@ -38,6 +38,19 @@
#include <QDebug>
namespace TextEditor {
+
+static QList<IOutlineWidgetFactory *> g_outlineWidgetFactories;
+
+IOutlineWidgetFactory::IOutlineWidgetFactory()
+{
+ g_outlineWidgetFactories.append(this);
+}
+
+IOutlineWidgetFactory::~IOutlineWidgetFactory()
+{
+ g_outlineWidgetFactories.removeOne(this);
+}
+
namespace Internal {
OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
@@ -153,7 +166,7 @@ void OutlineWidgetStack::updateCurrentEditor(Core::IEditor *editor)
IOutlineWidget *newWidget = 0;
if (editor) {
- foreach (IOutlineWidgetFactory *widgetFactory, m_factory->widgetFactories()) {
+ for (IOutlineWidgetFactory *widgetFactory : g_outlineWidgetFactories) {
if (widgetFactory->supportsEditor(editor)) {
newWidget = widgetFactory->createWidget(editor);
break;
@@ -189,16 +202,6 @@ OutlineFactory::OutlineFactory()
setPriority(600);
}
-QList<IOutlineWidgetFactory*> OutlineFactory::widgetFactories() const
-{
- return m_factories;
-}
-
-void OutlineFactory::setWidgetFactories(QList<IOutlineWidgetFactory*> factories)
-{
- m_factories = factories;
-}
-
Core::NavigationView OutlineFactory::createWidget()
{
Core::NavigationView n;
diff --git a/src/plugins/texteditor/outlinefactory.h b/src/plugins/texteditor/outlinefactory.h
index 11a1f4d0a9..940aab969e 100644
--- a/src/plugins/texteditor/outlinefactory.h
+++ b/src/plugins/texteditor/outlinefactory.h
@@ -72,15 +72,10 @@ class OutlineFactory : public Core::INavigationWidgetFactory
public:
OutlineFactory();
- QList<IOutlineWidgetFactory*> widgetFactories() const;
- void setWidgetFactories(QList<IOutlineWidgetFactory*> factories);
-
// from INavigationWidgetFactory
virtual Core::NavigationView createWidget();
virtual void saveSettings(QSettings *settings, int position, QWidget *widget);
virtual void restoreSettings(QSettings *settings, int position, QWidget *widget);
-private:
- QList<IOutlineWidgetFactory*> m_factories;
};
} // namespace Internal
diff --git a/src/plugins/texteditor/quickfix.cpp b/src/plugins/texteditor/quickfix.cpp
index 1fff0b3d6f..8f6012829b 100644
--- a/src/plugins/texteditor/quickfix.cpp
+++ b/src/plugins/texteditor/quickfix.cpp
@@ -56,11 +56,20 @@ void QuickFixOperation::setDescription(const QString &description)
_description = description;
}
+static QList<QuickFixFactory *> g_quickFixFactories;
+
QuickFixFactory::QuickFixFactory(QObject *parent)
: QObject(parent)
{
+ g_quickFixFactories.append(this);
}
QuickFixFactory::~QuickFixFactory()
{
+ g_quickFixFactories.removeOne(this);
+}
+
+const QList<QuickFixFactory *> QuickFixFactory::allQuickFixFactories()
+{
+ return g_quickFixFactories;
}
diff --git a/src/plugins/texteditor/quickfix.h b/src/plugins/texteditor/quickfix.h
index 715d9e09b7..c9ee1f6f0b 100644
--- a/src/plugins/texteditor/quickfix.h
+++ b/src/plugins/texteditor/quickfix.h
@@ -114,6 +114,8 @@ public:
QuickFixFactory(QObject *parent = 0);
~QuickFixFactory();
+ static const QList<QuickFixFactory *> allQuickFixFactories();
+
virtual void matchingOperations(const QuickFixInterface &interface, QuickFixOperations &result) = 0;
};
diff --git a/src/plugins/texteditor/snippets/snippetprovider.cpp b/src/plugins/texteditor/snippets/snippetprovider.cpp
index 3791996d12..13e9515232 100644
--- a/src/plugins/texteditor/snippets/snippetprovider.cpp
+++ b/src/plugins/texteditor/snippets/snippetprovider.cpp
@@ -27,8 +27,33 @@
#include "texteditorplugin.h"
+#include <utils/algorithm.h>
+
using namespace TextEditor;
+static QList<SnippetProvider *> g_snippetProviders;
+
+const QList<SnippetProvider *> SnippetProvider::snippetProviders()
+{
+ return g_snippetProviders;
+}
+
+SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId)
+{
+ return Utils::findOrDefault(g_snippetProviders,
+ Utils::equal(&SnippetProvider::groupId, groupId));
+}
+
+SnippetProvider::SnippetProvider()
+{
+ g_snippetProviders.append(this);
+}
+
+SnippetProvider::~SnippetProvider()
+{
+ g_snippetProviders.removeOne(this);
+}
+
/*!
\group Snippets
\title Snippets for Editors
diff --git a/src/plugins/texteditor/snippets/snippetprovider.h b/src/plugins/texteditor/snippets/snippetprovider.h
index 0bb0b0682c..5c343df182 100644
--- a/src/plugins/texteditor/snippets/snippetprovider.h
+++ b/src/plugins/texteditor/snippets/snippetprovider.h
@@ -41,6 +41,9 @@ class TEXTEDITOR_EXPORT SnippetProvider : public QObject
public:
using EditorDecorator = std::function<void(TextEditorWidget *)>;
+ static const QList<SnippetProvider *> snippetProviders();
+ static SnippetProvider *snippetProviderForGroupId(const QString &groupId);
+
static void registerGroup(const QString &groupId, const QString &displayName,
EditorDecorator editorDecorator = EditorDecorator());
@@ -51,7 +54,8 @@ public:
void decorateEditor(TextEditorWidget *editor) const;
private:
- SnippetProvider() = default;
+ SnippetProvider();
+ ~SnippetProvider() override;
QString m_groupId;
QString m_displayName;
diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp
index 4aabbf2fd2..20c9615d5a 100644
--- a/src/plugins/texteditor/snippets/snippetscollection.cpp
+++ b/src/plugins/texteditor/snippets/snippetscollection.cpp
@@ -409,9 +409,7 @@ int SnippetsCollection::groupIndex(const QString &groupId) const
void SnippetsCollection::identifyGroups()
{
- const QList<SnippetProvider *> &providers =
- ExtensionSystem::PluginManager::getObjects<SnippetProvider>();
- foreach (SnippetProvider *provider, providers) {
+ for (SnippetProvider *provider : SnippetProvider::snippetProviders()) {
const int groupIndex = m_groupIndexById.size();
m_groupIndexById.insert(provider->groupId(), groupIndex);
m_snippets.resize(groupIndex + 1);
diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp
index 85b88d4eb4..96a81d27f0 100644
--- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp
+++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp
@@ -328,9 +328,8 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
{
m_ui.setupUi(w);
- const QList<SnippetProvider *> &providers =
- ExtensionSystem::PluginManager::getObjects<SnippetProvider>();
- foreach (SnippetProvider *provider, providers) {
+ const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders();
+ for (SnippetProvider *provider : providers) {
m_ui.groupCombo->addItem(provider->displayName(), provider->groupId());
SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w);
provider->decorateEditor(snippetEditor);
@@ -537,8 +536,7 @@ void SnippetsSettingsPagePrivate::setSnippetContent()
void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
{
- const QList<SnippetProvider *> &providers =
- ExtensionSystem::PluginManager::getObjects<SnippetProvider>();
+ const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders();
for (int i = 0; i < m_ui.groupCombo->count(); ++i) {
SnippetEditorWidget *snippetEditor = editorAt(i);
snippetEditor->textDocument()->setFontSettings(fontSettings);
diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp
index 80f95ba22c..37b7aed27f 100644
--- a/src/plugins/texteditor/texteditorplugin.cpp
+++ b/src/plugins/texteditor/texteditorplugin.cpp
@@ -147,8 +147,6 @@ bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMe
void TextEditorPlugin::extensionsInitialized()
{
- m_outlineFactory->setWidgetFactories(ExtensionSystem::PluginManager::getObjects<TextEditor::IOutlineWidgetFactory>());
-
connect(m_settings, &TextEditorSettings::fontSettingsChanged,
this, &TextEditorPlugin::updateSearchResultsFont);
diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp
index 2e26d4026e..84edc57092 100644
--- a/src/plugins/vcsbase/basevcseditorfactory.cpp
+++ b/src/plugins/vcsbase/basevcseditorfactory.cpp
@@ -83,10 +83,13 @@ VcsEditorFactory::VcsEditorFactory(const VcsBaseEditorParameters *parameters,
VcsBaseEditor *VcsEditorFactory::createEditorById(const char *id)
{
- auto factory = ExtensionSystem::PluginManager::getObject<VcsEditorFactory>(
- [id](QObject *ob) { return ob->property("VcsEditorFactoryName").toByteArray() == id; });
- QTC_ASSERT(factory, return 0);
- return qobject_cast<VcsBaseEditor *>(factory->createEditor());
+ for (IEditorFactory *factory : allEditorFactories()) {
+ if (auto vcsFactory = qobject_cast<VcsEditorFactory *>(factory)) {
+ if (vcsFactory->property("VcsEditorFactoryName").toByteArray() == id)
+ return qobject_cast<VcsBaseEditor *>(factory->createEditor());
+ }
+ }
+ return nullptr;
}
} // namespace VcsBase
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index 195dac2d14..0c9f62cb37 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -343,8 +343,7 @@ void WelcomeMode::initPlugins()
QSettings *settings = ICore::settings();
m_activePage = Id::fromSetting(settings->value(currentPageSettingsKeyC));
- const QList<IWelcomePage *> availablePages = PluginManager::getObjects<IWelcomePage>();
- for (IWelcomePage *page : availablePages)
+ for (IWelcomePage *page : IWelcomePage::allWelcomePages())
addPage(page);
// make sure later added pages are made available too: