diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 57a911ce7de65b477db0708478ca340ca7634e87..b2ff7378eef0edcdd97d20df9dc8506b3787a183 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 static T *getObject() { QReadLocker lock(listLock()); diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index d78ada13f77e92ba48dfefce7fd045594b9bebc3..eaf27d433e7fcfe276396246d5ac5f50cc72fd00 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 g_customImportProviders; + +CustomImportsProvider::CustomImportsProvider(QObject *parent) + : QObject(parent) +{ + g_customImportProviders.append(this); +} + +CustomImportsProvider::~CustomImportsProvider() +{ + g_customImportProviders.removeOne(this); +} + +const QList 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 806b858f3982a577f059a70bf415f84a06e84368..fd38b68aba3db3ff11081a2af0c0b2779cd02ce7 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 allProviders(); + virtual QList imports(ValueOwner *valueOwner, const Document *context) const = 0; }; diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index eeceb6a7866d266ffc93923f006189013cdb046d..61cdcd15d22a26f4f005e83a15cc6672f3c47529 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -33,8 +33,6 @@ #include "qmljsqrcparser.h" #include "qmljsconstants.h" -#include - #include 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(); - 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)); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 460c749ebade6a92ef57e592bce51ba272d04e8d..8b5afb009201cce6d10c4e4bddb2f9567edf3a2d 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -41,8 +41,6 @@ #include #include -#include - #include #include #include @@ -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 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 providerList = ExtensionSystem::PluginManager::getObjects(); - 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 021e5d7cff980e29571dd427be5de716436f379c..df2db99551c869233dc191efef060faf157913ec 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 a9bf34e451a738faa1851a33c40883f168e825d0..b252d0de2beed00fee4336abcddd4cccee66e5f7 100644 --- a/src/plugins/coreplugin/basefilewizard.cpp +++ b/src/plugins/coreplugin/basefilewizard.cpp @@ -28,14 +28,24 @@ #include "basefilewizardfactory.h" #include "ifilewizardextension.h" -#include - #include using namespace Utils; namespace Core { +static QList 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 extensionList - = ExtensionSystem::PluginManager::getObjects(); - - for (auto it = extensionList.begin(); it != extensionList.end(); ) { - const QList 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 extensionList - = ExtensionSystem::PluginManager::getObjects(); - foreach (IFileWizardExtension *ex, extensionList) + for (IFileWizardExtension *ex : g_fileWizardExtensions) ex->firstExtensionPageShown(m_files, m_extraValues); } } @@ -99,9 +96,7 @@ void BaseFileWizard::accept() break; } - QList extensionList - = ExtensionSystem::PluginManager::getObjects(); - 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 16ac6e91844e24bf48d0fa28a0640eb432f81fa3..49d72dc1d9316fc0a196cfeef673e352c9e9902f 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 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::allOptionsPages() +{ + return g_optionsPages; } /*! @@ -183,6 +190,24 @@ bool Core::IOptionsPage::matches(const QString &searchKeyWord) const return false; } +static QList g_optionsPagesProviders; + +Core::IOptionsPageProvider::IOptionsPageProvider(QObject *parent) + : QObject(parent) +{ + g_optionsPagesProviders.append(this); +} + +Core::IOptionsPageProvider::~IOptionsPageProvider() +{ + g_optionsPagesProviders.removeOne(this); +} + +const QList 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 b726755b7b5ed7c3bad477b40e6575e753b14bdb..16e6d285c0449be88622cf5c322e8139a6e1f109 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 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 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 dca59526ddbf47c62b164b8c394b0436c1b28772..4d1aea8fd926b01d51bf8d0d66373c746fac423c 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -27,7 +27,6 @@ #include -#include #include #include #include @@ -69,7 +68,7 @@ bool optionsPageLessThan(const IOptionsPage *p1, const IOptionsPage *p2) static inline QList sortedOptionsPages() { - QList rc = ExtensionSystem::PluginManager::getObjects(); + QList 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()); + 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 312d08346ba3b6df6f37b18f15b92ac3878f6662..7feb9aae022dce9fb4cfd4ad2358966be415ca35 100644 --- a/src/plugins/coreplugin/diffservice.cpp +++ b/src/plugins/coreplugin/diffservice.cpp @@ -25,13 +25,23 @@ #include "diffservice.h" -#include - namespace Core { +static DiffService *g_instance = nullptr; + +DiffService::DiffService() +{ + g_instance = this; +} + +DiffService::~DiffService() +{ + g_instance = nullptr; +} + DiffService *DiffService::instance() { - return ExtensionSystem::PluginManager::getObject(); + return g_instance; } } // Core diff --git a/src/plugins/coreplugin/diffservice.h b/src/plugins/coreplugin/diffservice.h index 72b9881d9fce4576eb0a4de1a5fedf57a6ce4dd5..1c241364dc405980ea7eee6f20e38cd81fc7ef03 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 49cc96566a41ec80b517f35b3d0a7b5863e41f9c..0edf3a39669a0b044acc59af8ec0a27d5eaf79e5 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 -QSet filterStrings() +QString DocumentManager::allDocumentFactoryFiltersString(QString *allFilesFilter = 0) { - QSet filters; - for (FactoryType *factory : ExtensionSystem::PluginManager::getObjects()) { + QSet 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 uniqueFilters = filterStrings() - + filterStrings(); 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 45fc900f183f6c19dab45cf6a2c19527ac1fbfc1..61d0854cdf2b7fd8702bff743dd0fd1dfbd9b775 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 -EditorFactoryLike *findById(Id id) -{ - return ExtensionSystem::PluginManager::getObject( - [&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(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(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(); + 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(); + 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(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 c3abc40b8a72b9981206e9c43ad9876b3061c83a..b32b6036bc89405a7ca40cd47b1e2687f304be8d 100644 --- a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp +++ b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp @@ -27,9 +27,24 @@ #include -Core::IEditorFactory::IEditorFactory(QObject *parent) +namespace Core { + +static QList g_editorFactories; + +IEditorFactory::IEditorFactory(QObject *parent) : QObject(parent) { + g_editorFactories.append(this); +} +IEditorFactory::~IEditorFactory() +{ + g_editorFactories.removeOne(this); +} + +const QList IEditorFactory::allEditorFactories() +{ + return g_editorFactories; } +} // Core diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.h b/src/plugins/coreplugin/editormanager/ieditorfactory.h index 583001951cb226c2421b3e26f41e98724d59a4d7..5ed1a83edade884fde8c7cc8a2b1983632e7c8cb 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 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 7da7f484442337594802eb8fe14aa704c703cc17..246003162f80c638d231611931b2e6f3ac1523f5 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 g_externalEditors; + +IExternalEditor::IExternalEditor(QObject *parent) + : QObject(parent) +{ + g_externalEditors.append(this); +} + +IExternalEditor::~IExternalEditor() +{ + g_externalEditors.removeOne(this); +} + +const QList IExternalEditor::allExternalEditors() +{ + return g_externalEditors; +} + +} // Core diff --git a/src/plugins/coreplugin/editormanager/iexternaleditor.h b/src/plugins/coreplugin/editormanager/iexternaleditor.h index 24784b1e4ad7ea0735a08e00aa57fada9bd3bcc2..84d99bcef085198d28919d1ce84a6004cd217309 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 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 3ae5ce0e5003026b3bb023e85bd2b7bf43f07083..c90ba0ba363cd53fcd039a0421f8e98edb47dfc7 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 findInterfaces = ExtensionSystem::PluginManager::getObjects(); Command *cmd; ActionContainer *mfindadvanced = ActionManager::actionContainer(Constants::M_FIND_ADVANCED); bool haveEnabledFilters = false; const Id base("FindFilter."); - QList sortedFilters = findInterfaces; + QList 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 ba619cfa30961974d1be3f681510e03c470fc30f..a4699dc7b3f121b0d62be101a3d21969ee6fd7c3 100644 --- a/src/plugins/coreplugin/find/findtoolbar.cpp +++ b/src/plugins/coreplugin/find/findtoolbar.cpp @@ -36,8 +36,6 @@ #include #include -#include - #include #include #include @@ -727,10 +725,10 @@ void FindToolBar::hideAndResetFocus() FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const { - QList placeholders = ExtensionSystem::PluginManager::getObjects(); + const QList 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 d57a16370e1ff02684c17afe8057101512886837..c861d1e0df99defe5bacd650d43e477960c7b2b8 100644 --- a/src/plugins/coreplugin/find/ifindfilter.cpp +++ b/src/plugins/coreplugin/find/ifindfilter.cpp @@ -227,6 +227,23 @@ namespace Core { +static QList g_findFilters; + +IFindFilter::IFindFilter() +{ + g_findFilters.append(this); +} + +IFindFilter::~IFindFilter() +{ + g_findFilters.removeOne(this); +} + +const QList 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 9c67c29fc2e63cc90446d5a871be56229f0fe2ea..efedbf44f9d8e70c27e5b3a3b3beb91a459fd65a 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 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 a1b32359e29ebd9d3bafa85ac2aac845a81953c1..90ade039d57b550e6bf6f377aa8d71c049e448dc 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 - #include using namespace Core; FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0; +static QList 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::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 4073354dc1d61a8449d8d4c767189fd5c28cbfcb..4029d3e3abef09767017db7cd6621a7e9e9c9c2e 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 allFindToolbarPlaceHolders(); + QWidget *owner() const; bool isUsedByWidget(QWidget *widget); diff --git a/src/plugins/coreplugin/idocumentfactory.cpp b/src/plugins/coreplugin/idocumentfactory.cpp index 4aba09b97ac35aaa570a0ba0dc63abdef9ccfe29..016d562d8bdb6b360d63159c815975202caee010 100644 --- a/src/plugins/coreplugin/idocumentfactory.cpp +++ b/src/plugins/coreplugin/idocumentfactory.cpp @@ -29,6 +29,24 @@ namespace Core { +static QList g_documentFactories; + +IDocumentFactory::IDocumentFactory(QObject *parent) + : QObject(parent) +{ + g_documentFactories.append(this); +} + +IDocumentFactory::~IDocumentFactory() +{ + g_documentFactories.removeOne(this); +} + +const QList 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 518cb23f1f058ac3db547dc8f29c2a32733390ea..461f8aeb4b4dba236d347fa8c77b2beb58ba5e99 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 allDocumentFactories(); typedef std::function Opener; IDocument *open(const QString &filename); diff --git a/src/plugins/coreplugin/ifilewizardextension.h b/src/plugins/coreplugin/ifilewizardextension.h index 2e788eb8c75997004406ac39a4ee5d50516f680c..494680a87ad46ce64ebc00cfef0e33bffdd9c137 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 allFileWizardExtensions(); + /* Return a list of pages to be added to the Wizard (empty list if not * applicable). */ virtual QList extensionPages(const IWizardFactory *wizard) = 0; diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp index 06dfdb43bc4c9886c85591b70ee1e5e66596356b..eb7c78993d9f2fdf01daeaca741387deafe02c52 100644 --- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp +++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp @@ -85,12 +85,25 @@ using namespace Core; +static QList 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::allNavigationFactories() +{ + return g_navigationWidgetFactories; } /*! diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.h b/src/plugins/coreplugin/inavigationwidgetfactory.h index 220521223221a33dc70f66f662bcc425b0228723..e569b4b366de329b4c4866a8ff5d2ad56fb31a08 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 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 55d266b406acca3a9a46d8ef7c49427c617f7767..d4cd8cc4a9daedaf15f8a5391d8ce6f4f4634f6c 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 toolBarWidgets() const = 0; diff --git a/src/plugins/coreplugin/iwelcomepage.cpp b/src/plugins/coreplugin/iwelcomepage.cpp index a99a309ea7690adad781f9aa4f772482b5f39d0f..0f93bb1f3b603058153557fd726d36d17d43f488 100644 --- a/src/plugins/coreplugin/iwelcomepage.cpp +++ b/src/plugins/coreplugin/iwelcomepage.cpp @@ -41,12 +41,21 @@ using namespace Utils; namespace Core { +static QList g_welcomePages; + +const QList 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 4732a2893c1c4f2e5abd58a53e70bbac481be137..7fa43653eb0387519154b9f0d0f022083e857e59 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 allWelcomePages(); }; class WelcomePageButtonPrivate; diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.cpp b/src/plugins/coreplugin/locator/ilocatorfilter.cpp index 1e74741c7ed8813219db7a322183e1a00d4fadbe..5ba268b5e3a6a7999aeddeafa0acc23f85b64c3d 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 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::allLocatorFilters() +{ + return g_locatorFilters; } /*! diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h index 828f21fb59041e61b5125b626b40a3a11aa824c2..c6adae975e5acfbce4777daafc9be1548d4ffb0e 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 allLocatorFilters(); Id id() const; Id actionId() const; diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp index a3e9df5e45cd132e1683e669cd26e3349dfca732..a4261d571c7805a243e99bb5584dbe950d6d98b4 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(); + 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 13d7036d8fbf6dd8b4bc4e65d289726e8ef5c47e..2b977015754b7bc6f086addcd548255e8f12970b 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()); - m_rightNavigationWidget->setFactories(PluginManager::getObjects()); + 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 documentFactories = PluginManager::getObjects(); + const QList 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 034271a750b8794be8258a76e190c21066e6e674..be6938af650edb0c308e3f0c21b59439e330856e 100644 --- a/src/plugins/coreplugin/outputpanemanager.cpp +++ b/src/plugins/coreplugin/outputpanemanager.cpp @@ -37,8 +37,6 @@ #include #include -#include - #include #include #include @@ -66,6 +64,22 @@ using namespace Utils; namespace Core { + +// OutputPane + +static QList 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(); + 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 02c63534c7b96973ac38e58fe8512cac2b76d449..fba4b733aa1e2b4d50f4dd117db849a3dce6be30 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 8ded187d8890e099ae6801b68d3587da56091da0..349c7111d4a688a9a629f70fd8fb67bcd3281943 100644 --- a/src/plugins/cppeditor/cppquickfixassistant.cpp +++ b/src/plugins/cppeditor/cppquickfixassistant.cpp @@ -34,7 +34,7 @@ #include -#include +#include #include using namespace TextEditor; @@ -59,10 +59,9 @@ IAssistProcessor *CppQuickFixAssistProvider::createProcessor() const QList CppQuickFixAssistProvider::quickFixFactories() const { - QList results; - foreach (CppQuickFixFactory *f, ExtensionSystem::PluginManager::getObjects()) - results.append(f); - return results; + return Utils::filtered(QuickFixFactory::allQuickFixFactories(), [](QuickFixFactory *f) { + return qobject_cast(f) != nullptr; + }); } // -------------------------- diff --git a/src/plugins/cppeditor/fileandtokenactions_test.cpp b/src/plugins/cppeditor/fileandtokenactions_test.cpp index 463172d45bd909fbe2d726bd8c7e71d33ab06d74..21b11c7524bae92116193aa91b73f4e457d043fb 100644 --- a/src/plugins/cppeditor/fileandtokenactions_test.cpp +++ b/src/plugins/cppeditor/fileandtokenactions_test.cpp @@ -41,7 +41,6 @@ #include #include -#include #include #include #include @@ -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 quickFixFactories - = ExtensionSystem::PluginManager::getObjects(); - 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(quickFixFactory)) { - QScopedPointer factoryProducingGuiLessOperations; - factoryProducingGuiLessOperations.reset(InsertVirtualMethods::createTestFactory()); - factoryProducingGuiLessOperations->match(qfi, operations); - } else { - quickFixFactory->match(qfi, operations); - } + for (QuickFixFactory *quickFixFactory : QuickFixFactory::allQuickFixFactories()) { + if (auto cppQuickFixFactory = qobject_cast(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(cppQuickFixFactory)) { + QScopedPointer 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 633668aabfc6640a48b229b800a6227e8afb6857..599849a302d5bb7244837b2099e10f95ac92f10d 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 *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 21eadbea4fbe62136d03b14839be7c7ebdc0250f..5986d7a5040805c7b9d2827f40692b2e744d7937 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 *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 809d546732be784f451fd3a97aeda610176f4ded..6d35cdd78faec2810573b4935c174f22c482c3ab 100644 --- a/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp +++ b/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp @@ -30,13 +30,15 @@ #include "../editor/nimindenter.h" #include + #include #include -#include #include #include +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 *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 50866d63a429b8fab97065f7b5c8e4ce51834a60..d0856ad398efdffb8c19195caa06286cd4b3c2ca 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -38,7 +38,7 @@ #include #include #include -#include + #include #include @@ -318,6 +318,18 @@ void BuildConfiguration::prependCompilerPathToEnvironment(Kit *k, Utils::Environ // IBuildConfigurationFactory /// +static QList 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 factories - = ExtensionSystem::PluginManager::getObjects( - [&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 factories - = ExtensionSystem::PluginManager::instance()->getObjects(); 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 factories - = ExtensionSystem::PluginManager::instance()->getObjects(); 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 factories - = ExtensionSystem::PluginManager::getObjects( - [&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 3bc718fd514936b0d8fa8776a130eedef2e8db26..c9584e1d9ba7a7262c611c0e2c4eaf603ea45755 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 ff2bf2bf3f4d48c04dccebd3602edc32080a851b..265a718f143300558014bb38e20260a81acf0b72 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 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::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 adc9192060351bd3d9eb41a856661c9b95f78813..7a0f6db92aabd2c40095d71ab15da3335243ac46 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 allBuildStepFactories(); BuildStepInfo stepInfo() const; Core::Id stepId() const; diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index 1d1ffab0d6649c1fca93de1166991cf21a6fd955..d5979a97a6e4e2a816aef792fd76a6b3d3ec9ce9 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -32,7 +32,6 @@ #include "projectexplorer.h" #include "target.h" -#include #include using namespace ProjectExplorer; @@ -108,8 +107,7 @@ bool BuildStepList::fromMap(const QVariantMap &map) if (!ProjectConfiguration::fromMap(map)) return false; - const QList factories - = ExtensionSystem::PluginManager::getObjects(); + const QList 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 d835b3f6092654c29aa79ecc02aa07eb9f4ecc15..3e05c09b3101cc3f706c04ddf47b9d0d4eaa0097 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -32,7 +32,7 @@ #include #include -#include + #include #include #include @@ -288,8 +288,7 @@ void BuildStepListWidget::updateAddBuildStepMenu() { QMap > map; //Build up a list of possible steps and save map the display names to the (internal) name and factories. - QList factories = ExtensionSystem::PluginManager::getObjects(); - 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 057b49840d1fc83e0a63cc103f5e9c27bbac0a24..c9a84889d168233f53d081c0217c26b5f8eb793c 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 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 *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 619b8470c69d5d60228c40ed10d72d7278217a2c..d9fec08044da3ba50affe12adc54f916a8afe9e0 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 1c3967442d049fc7c25ce455dfc59ba4223eedc4..3c4e8ab8f4c0a8f9c1cce848e6364580a03a5edb 100644 --- a/src/plugins/projectexplorer/deployconfiguration.cpp +++ b/src/plugins/projectexplorer/deployconfiguration.cpp @@ -32,8 +32,6 @@ #include "projectexplorer.h" #include "target.h" -#include - #include namespace ProjectExplorer { @@ -142,9 +140,22 @@ bool DeployConfiguration::isActive() const // DeployConfigurationFactory /// +static QList g_deployConfigurationFactories; + DeployConfigurationFactory::DeployConfigurationFactory() { setObjectName("DeployConfigurationFactory"); + g_deployConfigurationFactories.append(this); +} + +DeployConfigurationFactory::~DeployConfigurationFactory() +{ + g_deployConfigurationFactories.removeOne(this); +} + +QList DeployConfigurationFactory::allDeployConfigurationFactories() +{ + return g_deployConfigurationFactories; } QList 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( + 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::find(Target *parent) { - return ExtensionSystem::PluginManager::getObjects( + return Utils::filtered(g_deployConfigurationFactories, [&parent](DeployConfigurationFactory *factory) { return !factory->availableCreationIds(parent).isEmpty(); }); @@ -272,7 +283,7 @@ QList DeployConfigurationFactory::find(Target *par DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc) { - return ExtensionSystem::PluginManager::getObject( + 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 4e42e5e00f0f3bb2479215448ce641cafe79a9de..56a06ae58549117a9818c7e3f2c9f8250018bd18 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 allDeployConfigurationFactories(); // used to show the list of possible additons to a target, returns a list of types QList availableCreationIds(Target *parent) const; diff --git a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp index 5275df08af391f4718b4e47a11dd078239dd919b..86afd635ded85124f07ae62105f9ba17b80a3e2b 100644 --- a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp @@ -31,8 +31,6 @@ #include -#include - #include namespace ProjectExplorer { @@ -44,9 +42,7 @@ DeviceFactorySelectionDialog::DeviceFactorySelectionDialog(QWidget *parent) : ui->setupUi(this); ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start Wizard")); - const QList &factories - = ExtensionSystem::PluginManager::getObjects(); - 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 2d1e161d2cc08e55fc474b963d55de8a99b3235f..900f6d283ac054331349da3ad0221ac3b7adb98b 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -29,7 +29,7 @@ #include #include -#include + #include #include #include @@ -338,7 +338,7 @@ void DeviceManager::setDefaultDevice(Core::Id id) const IDeviceFactory *DeviceManager::restoreFactory(const QVariantMap &map) { - IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject( + 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 7be659e45028222b73a46cf550265598301b410f..98a841122e56b58a2fa843daf91d71e00b36be33 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -38,7 +38,7 @@ #include #include -#include + #include #include @@ -111,10 +111,8 @@ void DeviceSettingsWidget::initGui() m_ui->configurationComboBox->setModel(m_deviceManagerModel); m_ui->nameLineEdit->setValidator(m_nameValidator); - const QList &factories - = ExtensionSystem::PluginManager::getObjects(); - - 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 f9cb444c8d77308a543f4292a86fb1116e7fd1b1..8b02da344e1af7fb96595376e3206bbe5e6c710e 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp @@ -25,7 +25,7 @@ #include "idevicefactory.h" -#include +#include namespace ProjectExplorer { @@ -83,15 +83,29 @@ bool IDeviceFactory::canCreate() const return !availableCreationIds().isEmpty(); } +static QList g_deviceFactories; + IDeviceFactory *IDeviceFactory::find(Core::Id type) { - return ExtensionSystem::PluginManager::getObject( + 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::allDeviceFactories() +{ + return g_deviceFactories; +} } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h index 7010b190c783afa3de1f4f44ea2d0c96b225a720..42929ff2d73b6fa786098735269aab30c564881f 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 allDeviceFactories(); virtual QString displayNameForId(Core::Id type) const = 0; diff --git a/src/plugins/projectexplorer/ipotentialkit.h b/src/plugins/projectexplorer/ipotentialkit.h index 40237682aeebd3e515b6eb32fc48f204f7723696..1d25f7ad47ac46c9196d43128d0e93e262ea01ee 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 9f8692bbf4839bb0dbd1752477e9543bcff4fa10..89f8eda7382e1bbaf695ad034421cce60c442031 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 a4d7b608f667763fc29a9507fa88e3b62e27f2b6..c0cebbd0c80aa82fefeffda571d3b663572047a8 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -32,8 +32,6 @@ #include "osparser.h" #include "projectexplorerconstants.h" -#include - #include #include #include @@ -369,7 +367,7 @@ Id Kit::id() const static QIcon iconForDeviceType(Core::Id deviceType) { - const IDeviceFactory *factory = ExtensionSystem::PluginManager::getObject( + 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 6a46f957f9f5dfe351447f752f8834cbbf4818a4..e1c1bf091d8a166d88e428ca2974e3b50ad92f09 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 -#include #include #include @@ -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 *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 d4eae3df133eb92ba2201b0aa40a07ab039f0d52..0ec65f95dbf855679ac934f42952ea55926dab5e 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp @@ -37,7 +37,7 @@ #include #include -#include + #include #include #include @@ -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 factories - = ExtensionSystem::PluginManager::getObjects(); - 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 d48c9a389e6dde1aba7d53d91f94bd43281dccbd..91b2529e8dc4e76d898720a64641dff7335255ca 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -34,8 +34,6 @@ #include -#include - #include #include #include @@ -560,7 +558,7 @@ QSet KitFeatureProvider::availablePlatforms() const QString KitFeatureProvider::displayNameForPlatform(Id id) const { - foreach (IDeviceFactory *f, ExtensionSystem::PluginManager::getObjects()) { + 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 67655decb3fbbb30c62a22b56f3d7371ef048bf7..25565015d8990f8f135d08e1b88e003aec06540b 100644 --- a/src/plugins/projectexplorer/projectimporter.cpp +++ b/src/plugins/projectexplorer/projectimporter.cpp @@ -37,8 +37,6 @@ #include -#include - #include #include @@ -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 factories - = ExtensionSystem::PluginManager::getObjects(); 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 83cbdd0249b19d900d36b6a023efab6af0cfe6bc..9e08c4bb53564634af11643881fba4402904d07c 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -36,8 +36,6 @@ #include "session.h" #include "kitinformation.h" -#include - #include #include #include @@ -432,9 +430,22 @@ Utils::OutputFormatter *RunConfiguration::createOutputFormatter() const Translates the types to names to display to the user. */ +static QList g_runConfigurationFactories; + IRunConfigurationFactory::IRunConfigurationFactory(QObject *parent) : QObject(parent) { + g_runConfigurationFactories.append(this); +} + +IRunConfigurationFactory::~IRunConfigurationFactory() +{ + g_runConfigurationFactories.removeOne(this); +} + +const QList IRunConfigurationFactory::allRunConfigurationFactories() +{ + return g_runConfigurationFactories; } QList @@ -556,7 +567,7 @@ RunConfiguration *IRunConfigurationFactory::clone(Target *parent, RunConfigurati IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, const QVariantMap &map) { - return ExtensionSystem::PluginManager::getObject( + 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( + 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::find(Target *parent) { - return ExtensionSystem::PluginManager::getObjects( + 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 cf66ef36a6133b89998d1b33dc5e43b354452415..68e9aab7bde4d6574beeb54fe730147784d9808f 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 allRunConfigurationFactories(); enum CreationMode {UserCreate, AutoCreate}; diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index 56875347562c30765e9005463f6b60a741ef1b45..781f5872bea83cbae1cf3bf4386e00081f513c7d 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 factories = - ExtensionSystem::PluginManager::getObjects(); - QList menuActions; - for (IRunConfigurationFactory *factory : factories) { + for (IRunConfigurationFactory *factory : IRunConfigurationFactory::allRunConfigurationFactories()) { const QList 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 33bd4d83f07f94bfc31a1174da20c3769afb9552..ec7a43e39c30b275caeb6180f62df58a43fc28d2 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -87,8 +87,6 @@ class TargetPrivate public: TargetPrivate(Kit *k); - QList deployFactories() const; - bool m_isEnabled = true; QIcon m_overlayIcon; @@ -109,11 +107,6 @@ TargetPrivate::TargetPrivate(Kit *k) : m_kit(k) { } -QList TargetPrivate::deployFactories() const -{ - return ExtensionSystem::PluginManager::getObjects(); -} - 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 0336d83377d780452bf1507350f57b3b93914df0..f39582e7f1a67996293fdaa56ad94caa2e23d925 100644 --- a/src/plugins/projectexplorer/targetsetuppage.cpp +++ b/src/plugins/projectexplorer/targetsetuppage.cpp @@ -36,8 +36,9 @@ #include "targetsetupwidget.h" #include -#include + #include + #include #include #include @@ -52,6 +53,19 @@ #include namespace ProjectExplorer { + +static QList 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 potentialKits = - ExtensionSystem::PluginManager::instance()->getObjects(); - 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 d8337cf6ff75a1a0642e9e3b9923493cb1668a35..75ba8e6391613ff36cd8bc615e1ccee977c02dd9 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -36,7 +36,7 @@ #include #include #include -#include + #include #include #include @@ -56,6 +56,19 @@ const char SESSION_FILTER_WARNINGS[] = "TaskWindow.IncludeWarnings"; } namespace ProjectExplorer { + +static QList 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 handlers = ExtensionSystem::PluginManager::getObjects(); - 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 53e03e16ad8da5d46a4e1b5c5b0efe9639c9be42..4cc3ee120d5b86548a7bfd451630316345577094 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -322,6 +322,23 @@ QList ToolChain::validateKit(const Kit *) const Used by the tool chain manager to restore user-generated tool chains. */ +static QList g_toolChainFactories; + +ToolChainFactory::ToolChainFactory() +{ + g_toolChainFactories.append(this); +} + +ToolChainFactory::~ToolChainFactory() +{ + g_toolChainFactories.removeOne(this); +} + +const QList ToolChainFactory::allToolChainFactories() +{ + return g_toolChainFactories; +} + QList ToolChainFactory::autoDetect(const QList &alreadyKnown) { Q_UNUSED(alreadyKnown); diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 018c99fd7eb02d6b66a9e1568283a5c80063bf1b..10c86c9e920589d158cd2c0c38a494746256f00d 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 allToolChainFactories(); + QString displayName() const { return m_displayName; } virtual QList autoDetect(const QList &alreadyKnown); diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index b6c79b8773c48177de4b8dccbd606396d477e2c6..87ad2f2b30dde8e47ad3eda19b778b48c4bd5c55 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -31,8 +31,6 @@ #include -#include - #include #include #include @@ -139,7 +137,7 @@ static QList restoreFromFile(const FileName &fileName) if (version < 1) return result; - QList factories = ExtensionSystem::PluginManager::getObjects(); + const QList 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 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 restoreFromFile(const FileName &fileName) static QList autoDetectToolChains(const QList alreadyKnownTcs) { QList result; - const QList factories - = ExtensionSystem::PluginManager::getObjects(); - 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 2e76c7f3c40cc73735544a970dba913e34584eb7..8cfd23655e85d048d0e63c3740655e5d8f5f38c8 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( + 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 1d99c1aea5cfcf56f53c99ec5c9d22d780532c5c..7d6e94f8973dc96e8f9d50b611a6602bd3a1db3f 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 ba4775f2c272da1154ef44999852bd061b484bb8..ad99c81bf1fcd74f02916f7ad2be46a759aa33fc 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp @@ -34,7 +34,7 @@ #include #include -#include + #include #include #include @@ -54,6 +54,19 @@ static QString qtcProfileGroup() { return QLatin1String("preferences.qtcreator.k static QString qtcProfilePrefix() { return qtcProfileGroup() + sep; } namespace QbsProjectManager { + +static QList 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 providerList = ExtensionSystem::PluginManager::getObjects(); - 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 3acc165550603787821bd42e82f2ce23f86761d1..12b3e9a13bb31c7937b2ea6e3723bd29c3e05e89 100644 --- a/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp +++ b/src/plugins/qmakeprojectmanager/qmakerunconfigurationfactory.cpp @@ -25,7 +25,7 @@ #include "qmakerunconfigurationfactory.h" -#include +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( - [&t](QmakeRunConfigurationFactory *factory) { - return factory->canHandle(t); - }); + if (t) { + for (auto factory : IRunConfigurationFactory::allRunConfigurationFactories()) { + if (auto qmakeFactory = qobject_cast(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 1138a1341e86f907eae21ff379af7fbc235e90a0..7f7160d6ea7020fb3eb1f32c22bb5cc74bf0abd5 100644 --- a/src/plugins/qmljseditor/qmljsquickfixassist.cpp +++ b/src/plugins/qmljseditor/qmljsquickfixassist.cpp @@ -30,7 +30,7 @@ //temp #include "qmljsquickfix.h" -#include +#include using namespace QmlJSTools; using namespace TextEditor; @@ -85,10 +85,9 @@ IAssistProcessor *QmlJSQuickFixAssistProvider::createProcessor() const QList QmlJSQuickFixAssistProvider::quickFixFactories() const { - QList results; - foreach (QmlJSQuickFixFactory *f, ExtensionSystem::PluginManager::getObjects()) - results.append(f); - return results; + return Utils::filtered(QuickFixFactory::allQuickFixFactories(), [](QuickFixFactory *f) { + return qobject_cast(f) != nullptr; + }); } } // namespace QmlJSEditor diff --git a/src/plugins/qmljstools/qmljsbundleprovider.cpp b/src/plugins/qmljstools/qmljsbundleprovider.cpp index 10f81a9db3128add34a2fdb76682df7c3e3ec8ba..8fa30ae87014b467c111364d1b4bc2b9412edeff 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 g_bundleProviders; + +IBundleProvider::IBundleProvider(QObject *parent) + : QObject(parent) +{ + g_bundleProviders.append(this); +} + +IBundleProvider::~IBundleProvider() +{ + g_bundleProviders.removeOne(this); +} + +const QList IBundleProvider::allBundleProviders() +{ + return g_bundleProviders; +} + } // end namespace QmlJSTools diff --git a/src/plugins/qmljstools/qmljsbundleprovider.h b/src/plugins/qmljstools/qmljsbundleprovider.h index d3b01bbb225eaf010c8d89b001a943bfe755bd9e..8fc2258c69d7402d2264492daab35117ad9ad229 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 allBundleProviders(); virtual void mergeBundlesForKit(ProjectExplorer::Kit *kit, QmlJS::QmlLanguageBundles &bundles , const QHash &replacements) = 0; diff --git a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp index 60c1cad38f6f628b9131d0b966c874ebc76b6f19..42a42d4d1f195bcae4de4c7580fe0cf4eeb38d56 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 *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 9067f1cac80710c1459809fa6a94e16b3f8c4937..04bbb007e586e8decbdb1ab37391ea4c30c1a224 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 *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 4da912cc90c057193dc1eda40e407e1013df5a66..a493ca2e94b119ea75e15e2cf7ac4551f5fc61ff 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -33,8 +33,9 @@ #include #include #include + #include -#include + #include #include #include @@ -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 bundleProviders = - ExtensionSystem::PluginManager::getObjects(); + 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 dc23ea981f658bbc8bad07473702fddfdbb9037d..ebc8ae36eededd67e708e0fdf8fca36e5ac64ac4 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 g_qtVersionFactories; + QtVersionFactory::QtVersionFactory(QObject *parent) : QObject(parent) { + g_qtVersionFactories.append(this); } QtVersionFactory::~QtVersionFactory() { + g_qtVersionFactories.removeOne(this); +} + +const QList 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 factories = ExtensionSystem::PluginManager::getObjects(); + QList 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 d789717408b86d71febac60c7ebdbc217cd43682..c54b2c3745625249e6aa3951a061443bc9048225 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 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 321fd5895d049e89ecfa364a13de3b43a22048f4..621cfa6878dbe67e3d4824a3517c59d89d420bf0 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 factories = ExtensionSystem::PluginManager::getObjects(); + const QList 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 removed; QList changed; - QList factories = ExtensionSystem::PluginManager::getObjects(); + const QList 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 d6aa32fa03984aec95b0d427bad86f36827a9470..7ea654441fb49cb8009ccaeb2fbcb00f12e7e04c 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 0b047890992810cdd0bf9b68a634c62a2a803a9c..76dd86717e4bdfcef1a8be9523f2b0bc0cd6e0cf 100644 --- a/src/plugins/texteditor/outlinefactory.cpp +++ b/src/plugins/texteditor/outlinefactory.cpp @@ -38,6 +38,19 @@ #include namespace TextEditor { + +static QList 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 OutlineFactory::widgetFactories() const -{ - return m_factories; -} - -void OutlineFactory::setWidgetFactories(QList 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 11a1f4d0a931935db2a8debcbe63496830b0ef2c..940aab969e80d26e1dbf4e47d73156fc316d4ede 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 widgetFactories() const; - void setWidgetFactories(QList 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 m_factories; }; } // namespace Internal diff --git a/src/plugins/texteditor/quickfix.cpp b/src/plugins/texteditor/quickfix.cpp index 1fff0b3d6f1872c8075081b1d52c6227a57047de..8f6012829b8fb3e2c7dec025e3ef51781ab94276 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 g_quickFixFactories; + QuickFixFactory::QuickFixFactory(QObject *parent) : QObject(parent) { + g_quickFixFactories.append(this); } QuickFixFactory::~QuickFixFactory() { + g_quickFixFactories.removeOne(this); +} + +const QList QuickFixFactory::allQuickFixFactories() +{ + return g_quickFixFactories; } diff --git a/src/plugins/texteditor/quickfix.h b/src/plugins/texteditor/quickfix.h index 715d9e09b79a7ab49c904634aaeef62c0fe2c7f5..c9ee1f6f0b3840b6f4982230e03e9dc4f1b58865 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 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 3791996d12f5de84c4e8debd77df2684c552b29d..13e9515232324cc45ad77b71ed768d7d6bac7ade 100644 --- a/src/plugins/texteditor/snippets/snippetprovider.cpp +++ b/src/plugins/texteditor/snippets/snippetprovider.cpp @@ -27,8 +27,33 @@ #include "texteditorplugin.h" +#include + using namespace TextEditor; +static QList g_snippetProviders; + +const QList 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 0bb0b0682cd9dff159185ae90f19edc14f0aa778..5c343df18237fd094d2311917540e6ea744a3964 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; + static const QList 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 4aabbf2fd20c0657e1b5e394dc03fdda9e50d869..20c9615d5a66ede27e799fcefcd4e7365fe551ac 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 &providers = - ExtensionSystem::PluginManager::getObjects(); - 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 85b88d4eb4a49cae2d832a4e920445226d609ea8..96a81d27f0eb8b0b2bcfd8e14ab91be6126275ac 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 &providers = - ExtensionSystem::PluginManager::getObjects(); - foreach (SnippetProvider *provider, providers) { + const QList &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 &providers = - ExtensionSystem::PluginManager::getObjects(); + const QList &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 80f95ba22c7598f26975c444fc631ad641569254..37b7aed27fcf5e6bc1880e509c39775b6b2f5328 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()); - connect(m_settings, &TextEditorSettings::fontSettingsChanged, this, &TextEditorPlugin::updateSearchResultsFont); diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp index 2e26d4026e44befe9abfae5faa8e20708fbf9fc1..84edc570926ab920dff5855ac79d29a472827b52 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( - [id](QObject *ob) { return ob->property("VcsEditorFactoryName").toByteArray() == id; }); - QTC_ASSERT(factory, return 0); - return qobject_cast(factory->createEditor()); + for (IEditorFactory *factory : allEditorFactories()) { + if (auto vcsFactory = qobject_cast(factory)) { + if (vcsFactory->property("VcsEditorFactoryName").toByteArray() == id) + return qobject_cast(factory->createEditor()); + } + } + return nullptr; } } // namespace VcsBase diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index 195dac2d147ff3ef43a539355bfb6b80c4192ea8..0c9f62cb37f65145240bba65d589aa43b12cf90f 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 availablePages = PluginManager::getObjects(); - for (IWelcomePage *page : availablePages) + for (IWelcomePage *page : IWelcomePage::allWelcomePages()) addPage(page); // make sure later added pages are made available too: