From e6951090780275294716ad7ea3ecc5cb792571bf Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 18 Jan 2022 18:40:41 +0100 Subject: [PATCH] ProjectExplorer: Make ToolchainManager::toolchains() overloads explicit Saves a few cycles for the plain access. Also sprinkle a few 'const'. Change-Id: I238dfd9352ee39caa3aa48cd04a9f1cf827b029e Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/android/androidconfigurations.cpp | 8 ++++---- src/plugins/docker/dockerdevice.cpp | 9 ++++----- src/plugins/ios/iosconfigurations.cpp | 6 +++--- src/plugins/projectexplorer/gcctoolchain.cpp | 4 ++-- src/plugins/projectexplorer/kitinformation.cpp | 10 +++++----- src/plugins/projectexplorer/kitmanager.cpp | 2 +- src/plugins/projectexplorer/projectimporter.cpp | 2 +- src/plugins/projectexplorer/toolchainmanager.cpp | 10 +++++++--- src/plugins/projectexplorer/toolchainmanager.h | 4 +++- src/plugins/projectexplorer/toolchainoptionspage.cpp | 2 +- .../qmakeprojectmanager/qmakeprojectimporter.cpp | 6 +++--- src/plugins/qnx/qnxconfiguration.cpp | 8 ++++---- src/plugins/qtsupport/baseqtversion.cpp | 7 ++++--- src/plugins/qtsupport/qtkitinformation.cpp | 5 ++--- 14 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 700f8a063f4..ab7dc9343c3 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -1192,7 +1192,7 @@ static bool matchToolChain(const ToolChain *atc, const ToolChain *btc) void AndroidConfigurations::registerNewToolChains() { const Toolchains existingAndroidToolChains - = ToolChainManager::toolChains(Utils::equal(&ToolChain::typeId, Id(Constants::ANDROID_TOOLCHAIN_TYPEID))); + = ToolChainManager::toolchains(Utils::equal(&ToolChain::typeId, Id(Constants::ANDROID_TOOLCHAIN_TYPEID))); const Toolchains newToolchains = AndroidToolChainFactory::autodetectToolChains( existingAndroidToolChains); @@ -1205,7 +1205,7 @@ void AndroidConfigurations::registerNewToolChains() void AndroidConfigurations::removeOldToolChains() { - const auto tcs = ToolChainManager::toolChains(Utils::equal(&ToolChain::typeId, + const auto tcs = ToolChainManager::toolchains(Utils::equal(&ToolChain::typeId, Id(Constants::ANDROID_TOOLCHAIN_TYPEID))); for (ToolChain *tc : tcs) { if (!tc->isValid()) @@ -1352,7 +1352,7 @@ static QVariant findOrRegisterDebugger(ToolChain *tc, void AndroidConfigurations::registerCustomToolChainsAndDebuggers() { - const Toolchains existingAndroidToolChains = ToolChainManager::toolChains( + const Toolchains existingAndroidToolChains = ToolChainManager::toolchains( Utils::equal(&ToolChain::typeId, Utils::Id(Constants::ANDROID_TOOLCHAIN_TYPEID))); const FilePaths customNdks = Utils::transform(currentConfig().getCustomNdkList(), @@ -1406,7 +1406,7 @@ void AndroidConfigurations::updateAutomaticKitList() } // register new kits - const Toolchains toolchains = ToolChainManager::toolChains([](const ToolChain *tc) { + const Toolchains toolchains = ToolChainManager::toolchains([](const ToolChain *tc) { return tc->isAutoDetected() && tc->isValid() && tc->typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID; diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 6b5316b6abd..a3a75a4095d 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -628,7 +628,7 @@ void KitDetectorPrivate::undoAutoDetect() const }; emit q->logOutput('\n' + tr("Removing toolchain entries...")); - for (ToolChain *toolChain : ToolChainManager::toolChains()) { + for (ToolChain *toolChain : ToolChainManager::toolchains()) { QString detectionSource = toolChain->detectionSource(); if (toolChain->detectionSource() == m_sharedId) { emit q->logOutput(tr("Removed \"%1\"").arg(toolChain->displayName())); @@ -676,10 +676,9 @@ void KitDetectorPrivate::listAutoDetected() const }; emit q->logOutput('\n' + tr("Toolchains:")); - for (ToolChain *toolChain : ToolChainManager::toolChains()) { - if (toolChain->detectionSource() == m_sharedId) { + for (ToolChain *toolChain : ToolChainManager::toolchains()) { + if (toolChain->detectionSource() == m_sharedId) emit q->logOutput(toolChain->displayName()); - } }; if (QObject *cmakeManager = ExtensionSystem::PluginManager::getObjectByName("CMakeToolManager")) { @@ -733,7 +732,7 @@ Toolchains KitDetectorPrivate::autoDetectToolChains() { const QList factories = ToolChainFactory::allToolChainFactories(); - Toolchains alreadyKnown = ToolChainManager::toolChains(); + Toolchains alreadyKnown = ToolChainManager::toolchains(); Toolchains allNewToolChains; QApplication::processEvents(); emit q->logOutput('\n' + tr("Searching toolchains...")); diff --git a/src/plugins/ios/iosconfigurations.cpp b/src/plugins/ios/iosconfigurations.cpp index a5938c943f5..4477402abd5 100644 --- a/src/plugins/ios/iosconfigurations.cpp +++ b/src/plugins/ios/iosconfigurations.cpp @@ -114,10 +114,10 @@ static bool isSimulatorDeviceId(const Utils::Id &id) return id == Constants::IOS_SIMULATOR_TYPE; } -static QList clangToolChains(const QList &toolChains) +static QList clangToolChains(const Toolchains &toolChains) { QList clangToolChains; - foreach (ToolChain *toolChain, toolChains) + for (ToolChain *toolChain : toolChains) if (toolChain->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID) clangToolChains.append(static_cast(toolChain)); return clangToolChains; @@ -125,7 +125,7 @@ static QList clangToolChains(const QList &toolCha static QList autoDetectedIosToolChains() { - const QList toolChains = clangToolChains(ToolChainManager::toolChains()); + const QList toolChains = clangToolChains(ToolChainManager::toolchains()); return Utils::filtered(toolChains, [](ClangToolChain *toolChain) { return toolChain->isAutoDetected() && (toolChain->displayName().startsWith("iphone") diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 21bd4afdc2f..5626e08f12b 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1362,9 +1362,9 @@ void GccToolChainConfigWidget::handlePlatformLinkerFlagsChange() // ClangToolChain // -------------------------------------------------------------------------- -static QList mingwToolChains() +static const Toolchains mingwToolChains() { - return ToolChainManager::toolChains([](const ToolChain *tc) -> bool { + return ToolChainManager::toolchains([](const ToolChain *tc) -> bool { return tc->typeId() == Constants::MINGW_TOOLCHAIN_TYPEID; }); } diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index 171ab499b91..5860d798407 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -270,8 +270,8 @@ private: { m_ignoreChanges = true; foreach (Utils::Id l, m_languageComboboxMap.keys()) { - const QList ltcList - = ToolChainManager::toolChains(Utils::equal(&ToolChain::language, l)); + const Toolchains ltcList + = ToolChainManager::toolchains(Utils::equal(&ToolChain::language, l)); QComboBox *cb = m_languageComboboxMap.value(l); cb->clear(); @@ -346,7 +346,7 @@ static QMap defaultToolChainIds() { QMap toolChains; const Abi abi = Abi::hostAbi(); - QList tcList = ToolChainManager::toolChains(Utils::equal(&ToolChain::targetAbi, abi)); + const Toolchains tcList = ToolChainManager::toolchains(Utils::equal(&ToolChain::targetAbi, abi)); foreach (Utils::Id l, ToolChainManager::allLanguages()) { ToolChain *tc = Utils::findOrDefault(tcList, Utils::equal(&ToolChain::language, l)); toolChains.insert(l, tc ? tc->id() : QByteArray()); @@ -498,7 +498,7 @@ void ToolChainKitAspect::setup(Kit *k) // ID is not found: Might be an ABI string... lockToolchains = false; const QString abi = QString::fromUtf8(id); - QList possibleTcs = ToolChainManager::toolChains( + const Toolchains possibleTcs = ToolChainManager::toolchains( [abi, l](const ToolChain *t) { return t->targetAbi().toString() == abi && t->language() == l; }); @@ -655,7 +655,7 @@ void ToolChainKitAspect::setAllToolChainsToMatch(Kit *k, ToolChain *tc) QTC_ASSERT(tc, return); QTC_ASSERT(k, return); - const QList allTcList = ToolChainManager::toolChains(); + const Toolchains allTcList = ToolChainManager::toolchains(); QTC_ASSERT(allTcList.contains(tc), return); QVariantMap result = k->value(ToolChainKitAspect::id()).toMap(); diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 1c338d730a7..a64783d5c3d 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -283,7 +283,7 @@ void KitManager::restoreKits() // TODO: This should not need to be done here. Instead, it should be a convenience // operation on some lower level, e.g. in the toolchain class(es). // Also, we shouldn't detect so many doublets in the first place. - for (ToolChain * const tc : ToolChainManager::toolChains()) { + for (ToolChain * const tc : ToolChainManager::toolchains()) { ToolChain *&bestTc = uniqueToolchains[tc->targetAbi()][tc->language()]; if (!bestTc) { bestTc = tc; diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp index 2fd7798704c..e69a1413612 100644 --- a/src/plugins/projectexplorer/projectimporter.cpp +++ b/src/plugins/projectexplorer/projectimporter.cpp @@ -411,7 +411,7 @@ ProjectImporter::ToolChainData ProjectImporter::findOrCreateToolChains(const ToolChainDescription &tcd) const { ToolChainData result; - result.tcs = ToolChainManager::toolChains([&tcd](const ToolChain *tc) { + result.tcs = ToolChainManager::toolchains([&tcd](const ToolChain *tc) { return tc->language() == tcd.language && Utils::Environment::systemEnvironment().isSameExecutable( tc->compilerCommand().toString(), tcd.compilerPath.toString()); diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 0cc3f76fd24..545601f2b87 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -141,13 +141,17 @@ void ToolChainManager::saveToolChains() ToolchainDetectionSettings().detectX64AsX32); } -Toolchains ToolChainManager::toolChains(const ToolChain::Predicate &predicate) +const Toolchains &ToolChainManager::toolchains() { - if (predicate) - return Utils::filtered(d->m_toolChains, predicate); return d->m_toolChains; } +Toolchains ToolChainManager::toolchains(const ToolChain::Predicate &predicate) +{ + QTC_ASSERT(predicate, return {}); + return Utils::filtered(d->m_toolChains, predicate); +} + ToolChain *ToolChainManager::toolChain(const ToolChain::Predicate &predicate) { return Utils::findOrDefault(d->m_toolChains, predicate); diff --git a/src/plugins/projectexplorer/toolchainmanager.h b/src/plugins/projectexplorer/toolchainmanager.h index d524dde76a8..d755176fc7f 100644 --- a/src/plugins/projectexplorer/toolchainmanager.h +++ b/src/plugins/projectexplorer/toolchainmanager.h @@ -61,7 +61,9 @@ public: static ToolChainManager *instance(); ~ToolChainManager() override; - static QList toolChains(const ToolChain::Predicate &predicate = ToolChain::Predicate()); + static const Toolchains &toolchains(); + static Toolchains toolchains(const ToolChain::Predicate &predicate); + static ToolChain *toolChain(const ToolChain::Predicate &predicate); static QList findToolChains(const Abi &abi); static ToolChain *findToolChain(const QByteArray &id); diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 8412f9ee041..7a0674c3728 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -249,7 +249,7 @@ public: m_widgetStack = new QStackedWidget; m_container->setWidget(m_widgetStack); - foreach (ToolChain *tc, ToolChainManager::toolChains()) + for (ToolChain *tc : ToolChainManager::toolchains()) insertToolChain(tc); auto buttonLayout = new QVBoxLayout; diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp index 13beee7ac5a..f5ff0d69985 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp @@ -241,11 +241,11 @@ void QmakeProjectImporter::deleteDirectoryData(void *directoryData) const delete static_cast(directoryData); } -static const QList preferredToolChains(BaseQtVersion *qtVersion, const QString &ms) +static const Toolchains preferredToolChains(BaseQtVersion *qtVersion, const QString &ms) { const QString spec = ms.isEmpty() ? qtVersion->mkspec() : ms; - const QList toolchains = ToolChainManager::toolChains(); + const Toolchains toolchains = ToolChainManager::toolchains(); const Abis qtAbis = qtVersion->qtAbis(); const auto matcher = [&](const ToolChain *tc) { return qtAbis.contains(tc->targetAbi()) && tc->suggestedMkspecList().contains(spec); @@ -256,7 +256,7 @@ static const QList preferredToolChains(BaseQtVersion *qtVersion, co ToolChain * const cToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) { return tc->language() == ProjectExplorer::Constants::C_LANGUAGE_ID && matcher(tc); }); - QList chosenToolchains; + Toolchains chosenToolchains; for (ToolChain * const tc : {cxxToolchain, cToolchain}) { if (tc) chosenToolchains << tc; diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp index 706551360b4..b47eaef622b 100644 --- a/src/plugins/qnx/qnxconfiguration.cpp +++ b/src/plugins/qnx/qnxconfiguration.cpp @@ -170,10 +170,10 @@ void QnxConfiguration::deactivate() if (!isActive()) return; - QList debuggersToRemove; - const QList toolChainsToRemove - = ToolChainManager::toolChains(Utils::equal(&ToolChain::compilerCommand, qccCompilerPath())); + const Toolchains toolChainsToRemove = + ToolChainManager::toolchains(Utils::equal(&ToolChain::compilerCommand, qccCompilerPath())); + QList debuggersToRemove; foreach (DebuggerItem debuggerItem, DebuggerItemManager::debuggers()) { if (findTargetByDebuggerPath(debuggerItem.command())) @@ -187,7 +187,7 @@ void QnxConfiguration::deactivate() KitManager::deregisterKit(kit); } - foreach (ToolChain *tc, toolChainsToRemove) + for (ToolChain *tc : toolChainsToRemove) ToolChainManager::deregisterToolChain(tc); foreach (DebuggerItem debuggerItem, debuggersToRemove) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 61e943824ae..475a177a71f 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1847,9 +1847,10 @@ bool BaseQtVersionPrivate::queryQMakeVariables(const FilePath &binary, const Env // Try running qmake with all kinds of tool chains set up in the environment. // This is required to make non-static qmakes work on windows where every tool chain // tries to be incompatible with any other. - Abis abiList = Abi::abisOfBinary(binary); - const QList tcList - = ToolChainManager::toolChains([&abiList](const ToolChain *t) { return abiList.contains(t->targetAbi()); }); + const Abis abiList = Abi::abisOfBinary(binary); + const Toolchains tcList = ToolChainManager::toolchains([&abiList](const ToolChain *t) { + return abiList.contains(t->targetAbi()); + }); for (ToolChain *tc : tcList) { Environment realEnv = env; tc->addToEnvironment(realEnv); diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index cde42dc7e1c..cb82826df34 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -219,7 +219,7 @@ void QtKitAspect::fix(Kit *k) return; const QString spec = version->mkspec(); - QList possibleTcs = ToolChainManager::toolChains([version](const ToolChain *t) { + Toolchains possibleTcs = ToolChainManager::toolchains([version](const ToolChain *t) { if (!t->isValid() || t->language() != ProjectExplorer::Constants::CXX_LANGUAGE_ID) return false; return Utils::anyOf(version->qtAbis(), [t](const Abi &qtAbi) { @@ -243,8 +243,7 @@ void QtKitAspect::fix(Kit *k) return tc1->priority() > tc2->priority(); }); - const QList goodTcs = Utils::filtered(possibleTcs, - [&spec](const ToolChain *t) { + const Toolchains goodTcs = Utils::filtered(possibleTcs, [&spec](const ToolChain *t) { return t->suggestedMkspecList().contains(spec); }); // Hack to prefer a tool chain from PATH (e.g. autodetected) over other matches.