diff options
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: |