ProjectExplorer: Make ToolchainManager::toolchains() overloads explicit

Saves a few cycles for the plain access.

Also sprinkle a few 'const'.

Change-Id: I238dfd9352ee39caa3aa48cd04a9f1cf827b029e
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2022-01-18 18:40:41 +01:00
parent 1720256e59
commit e695109078
14 changed files with 44 additions and 39 deletions

View File

@@ -1192,7 +1192,7 @@ static bool matchToolChain(const ToolChain *atc, const ToolChain *btc)
void AndroidConfigurations::registerNewToolChains() void AndroidConfigurations::registerNewToolChains()
{ {
const Toolchains existingAndroidToolChains 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( const Toolchains newToolchains = AndroidToolChainFactory::autodetectToolChains(
existingAndroidToolChains); existingAndroidToolChains);
@@ -1205,7 +1205,7 @@ void AndroidConfigurations::registerNewToolChains()
void AndroidConfigurations::removeOldToolChains() 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))); Id(Constants::ANDROID_TOOLCHAIN_TYPEID)));
for (ToolChain *tc : tcs) { for (ToolChain *tc : tcs) {
if (!tc->isValid()) if (!tc->isValid())
@@ -1352,7 +1352,7 @@ static QVariant findOrRegisterDebugger(ToolChain *tc,
void AndroidConfigurations::registerCustomToolChainsAndDebuggers() void AndroidConfigurations::registerCustomToolChainsAndDebuggers()
{ {
const Toolchains existingAndroidToolChains = ToolChainManager::toolChains( const Toolchains existingAndroidToolChains = ToolChainManager::toolchains(
Utils::equal(&ToolChain::typeId, Utils::Id(Constants::ANDROID_TOOLCHAIN_TYPEID))); Utils::equal(&ToolChain::typeId, Utils::Id(Constants::ANDROID_TOOLCHAIN_TYPEID)));
const FilePaths customNdks = Utils::transform(currentConfig().getCustomNdkList(), const FilePaths customNdks = Utils::transform(currentConfig().getCustomNdkList(),
@@ -1406,7 +1406,7 @@ void AndroidConfigurations::updateAutomaticKitList()
} }
// register new kits // register new kits
const Toolchains toolchains = ToolChainManager::toolChains([](const ToolChain *tc) { const Toolchains toolchains = ToolChainManager::toolchains([](const ToolChain *tc) {
return tc->isAutoDetected() return tc->isAutoDetected()
&& tc->isValid() && tc->isValid()
&& tc->typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID; && tc->typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID;

View File

@@ -628,7 +628,7 @@ void KitDetectorPrivate::undoAutoDetect() const
}; };
emit q->logOutput('\n' + tr("Removing toolchain entries...")); emit q->logOutput('\n' + tr("Removing toolchain entries..."));
for (ToolChain *toolChain : ToolChainManager::toolChains()) { for (ToolChain *toolChain : ToolChainManager::toolchains()) {
QString detectionSource = toolChain->detectionSource(); QString detectionSource = toolChain->detectionSource();
if (toolChain->detectionSource() == m_sharedId) { if (toolChain->detectionSource() == m_sharedId) {
emit q->logOutput(tr("Removed \"%1\"").arg(toolChain->displayName())); emit q->logOutput(tr("Removed \"%1\"").arg(toolChain->displayName()));
@@ -676,10 +676,9 @@ void KitDetectorPrivate::listAutoDetected() const
}; };
emit q->logOutput('\n' + tr("Toolchains:")); emit q->logOutput('\n' + tr("Toolchains:"));
for (ToolChain *toolChain : ToolChainManager::toolChains()) { for (ToolChain *toolChain : ToolChainManager::toolchains()) {
if (toolChain->detectionSource() == m_sharedId) { if (toolChain->detectionSource() == m_sharedId)
emit q->logOutput(toolChain->displayName()); emit q->logOutput(toolChain->displayName());
}
}; };
if (QObject *cmakeManager = ExtensionSystem::PluginManager::getObjectByName("CMakeToolManager")) { if (QObject *cmakeManager = ExtensionSystem::PluginManager::getObjectByName("CMakeToolManager")) {
@@ -733,7 +732,7 @@ Toolchains KitDetectorPrivate::autoDetectToolChains()
{ {
const QList<ToolChainFactory *> factories = ToolChainFactory::allToolChainFactories(); const QList<ToolChainFactory *> factories = ToolChainFactory::allToolChainFactories();
Toolchains alreadyKnown = ToolChainManager::toolChains(); Toolchains alreadyKnown = ToolChainManager::toolchains();
Toolchains allNewToolChains; Toolchains allNewToolChains;
QApplication::processEvents(); QApplication::processEvents();
emit q->logOutput('\n' + tr("Searching toolchains...")); emit q->logOutput('\n' + tr("Searching toolchains..."));

View File

@@ -114,10 +114,10 @@ static bool isSimulatorDeviceId(const Utils::Id &id)
return id == Constants::IOS_SIMULATOR_TYPE; return id == Constants::IOS_SIMULATOR_TYPE;
} }
static QList<ClangToolChain *> clangToolChains(const QList<ToolChain *> &toolChains) static QList<ClangToolChain *> clangToolChains(const Toolchains &toolChains)
{ {
QList<ClangToolChain *> clangToolChains; QList<ClangToolChain *> clangToolChains;
foreach (ToolChain *toolChain, toolChains) for (ToolChain *toolChain : toolChains)
if (toolChain->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID) if (toolChain->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID)
clangToolChains.append(static_cast<ClangToolChain *>(toolChain)); clangToolChains.append(static_cast<ClangToolChain *>(toolChain));
return clangToolChains; return clangToolChains;
@@ -125,7 +125,7 @@ static QList<ClangToolChain *> clangToolChains(const QList<ToolChain *> &toolCha
static QList<ClangToolChain *> autoDetectedIosToolChains() static QList<ClangToolChain *> autoDetectedIosToolChains()
{ {
const QList<ClangToolChain *> toolChains = clangToolChains(ToolChainManager::toolChains()); const QList<ClangToolChain *> toolChains = clangToolChains(ToolChainManager::toolchains());
return Utils::filtered(toolChains, [](ClangToolChain *toolChain) { return Utils::filtered(toolChains, [](ClangToolChain *toolChain) {
return toolChain->isAutoDetected() return toolChain->isAutoDetected()
&& (toolChain->displayName().startsWith("iphone") && (toolChain->displayName().startsWith("iphone")

View File

@@ -1362,9 +1362,9 @@ void GccToolChainConfigWidget::handlePlatformLinkerFlagsChange()
// ClangToolChain // ClangToolChain
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static QList<ToolChain *> 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; return tc->typeId() == Constants::MINGW_TOOLCHAIN_TYPEID;
}); });
} }

View File

@@ -270,8 +270,8 @@ private:
{ {
m_ignoreChanges = true; m_ignoreChanges = true;
foreach (Utils::Id l, m_languageComboboxMap.keys()) { foreach (Utils::Id l, m_languageComboboxMap.keys()) {
const QList<ToolChain *> ltcList const Toolchains ltcList
= ToolChainManager::toolChains(Utils::equal(&ToolChain::language, l)); = ToolChainManager::toolchains(Utils::equal(&ToolChain::language, l));
QComboBox *cb = m_languageComboboxMap.value(l); QComboBox *cb = m_languageComboboxMap.value(l);
cb->clear(); cb->clear();
@@ -346,7 +346,7 @@ static QMap<Utils::Id, QByteArray> defaultToolChainIds()
{ {
QMap<Utils::Id, QByteArray> toolChains; QMap<Utils::Id, QByteArray> toolChains;
const Abi abi = Abi::hostAbi(); const Abi abi = Abi::hostAbi();
QList<ToolChain *> tcList = ToolChainManager::toolChains(Utils::equal(&ToolChain::targetAbi, abi)); const Toolchains tcList = ToolChainManager::toolchains(Utils::equal(&ToolChain::targetAbi, abi));
foreach (Utils::Id l, ToolChainManager::allLanguages()) { foreach (Utils::Id l, ToolChainManager::allLanguages()) {
ToolChain *tc = Utils::findOrDefault(tcList, Utils::equal(&ToolChain::language, l)); ToolChain *tc = Utils::findOrDefault(tcList, Utils::equal(&ToolChain::language, l));
toolChains.insert(l, tc ? tc->id() : QByteArray()); 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... // ID is not found: Might be an ABI string...
lockToolchains = false; lockToolchains = false;
const QString abi = QString::fromUtf8(id); const QString abi = QString::fromUtf8(id);
QList<ToolChain *> possibleTcs = ToolChainManager::toolChains( const Toolchains possibleTcs = ToolChainManager::toolchains(
[abi, l](const ToolChain *t) { [abi, l](const ToolChain *t) {
return t->targetAbi().toString() == abi && t->language() == l; 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(tc, return);
QTC_ASSERT(k, return); QTC_ASSERT(k, return);
const QList<ToolChain *> allTcList = ToolChainManager::toolChains(); const Toolchains allTcList = ToolChainManager::toolchains();
QTC_ASSERT(allTcList.contains(tc), return); QTC_ASSERT(allTcList.contains(tc), return);
QVariantMap result = k->value(ToolChainKitAspect::id()).toMap(); QVariantMap result = k->value(ToolChainKitAspect::id()).toMap();

View File

@@ -283,7 +283,7 @@ void KitManager::restoreKits()
// TODO: This should not need to be done here. Instead, it should be a convenience // 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). // operation on some lower level, e.g. in the toolchain class(es).
// Also, we shouldn't detect so many doublets in the first place. // 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()]; ToolChain *&bestTc = uniqueToolchains[tc->targetAbi()][tc->language()];
if (!bestTc) { if (!bestTc) {
bestTc = tc; bestTc = tc;

View File

@@ -411,7 +411,7 @@ ProjectImporter::ToolChainData
ProjectImporter::findOrCreateToolChains(const ToolChainDescription &tcd) const ProjectImporter::findOrCreateToolChains(const ToolChainDescription &tcd) const
{ {
ToolChainData result; ToolChainData result;
result.tcs = ToolChainManager::toolChains([&tcd](const ToolChain *tc) { result.tcs = ToolChainManager::toolchains([&tcd](const ToolChain *tc) {
return tc->language() == tcd.language && return tc->language() == tcd.language &&
Utils::Environment::systemEnvironment().isSameExecutable( Utils::Environment::systemEnvironment().isSameExecutable(
tc->compilerCommand().toString(), tcd.compilerPath.toString()); tc->compilerCommand().toString(), tcd.compilerPath.toString());

View File

@@ -141,13 +141,17 @@ void ToolChainManager::saveToolChains()
ToolchainDetectionSettings().detectX64AsX32); 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; 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) ToolChain *ToolChainManager::toolChain(const ToolChain::Predicate &predicate)
{ {
return Utils::findOrDefault(d->m_toolChains, predicate); return Utils::findOrDefault(d->m_toolChains, predicate);

View File

@@ -61,7 +61,9 @@ public:
static ToolChainManager *instance(); static ToolChainManager *instance();
~ToolChainManager() override; ~ToolChainManager() override;
static QList<ToolChain *> 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 ToolChain *toolChain(const ToolChain::Predicate &predicate);
static QList<ToolChain *> findToolChains(const Abi &abi); static QList<ToolChain *> findToolChains(const Abi &abi);
static ToolChain *findToolChain(const QByteArray &id); static ToolChain *findToolChain(const QByteArray &id);

View File

@@ -249,7 +249,7 @@ public:
m_widgetStack = new QStackedWidget; m_widgetStack = new QStackedWidget;
m_container->setWidget(m_widgetStack); m_container->setWidget(m_widgetStack);
foreach (ToolChain *tc, ToolChainManager::toolChains()) for (ToolChain *tc : ToolChainManager::toolchains())
insertToolChain(tc); insertToolChain(tc);
auto buttonLayout = new QVBoxLayout; auto buttonLayout = new QVBoxLayout;

View File

@@ -241,11 +241,11 @@ void QmakeProjectImporter::deleteDirectoryData(void *directoryData) const
delete static_cast<DirectoryData *>(directoryData); delete static_cast<DirectoryData *>(directoryData);
} }
static const QList<ToolChain *> preferredToolChains(BaseQtVersion *qtVersion, const QString &ms) static const Toolchains preferredToolChains(BaseQtVersion *qtVersion, const QString &ms)
{ {
const QString spec = ms.isEmpty() ? qtVersion->mkspec() : ms; const QString spec = ms.isEmpty() ? qtVersion->mkspec() : ms;
const QList<ToolChain *> toolchains = ToolChainManager::toolChains(); const Toolchains toolchains = ToolChainManager::toolchains();
const Abis qtAbis = qtVersion->qtAbis(); const Abis qtAbis = qtVersion->qtAbis();
const auto matcher = [&](const ToolChain *tc) { const auto matcher = [&](const ToolChain *tc) {
return qtAbis.contains(tc->targetAbi()) && tc->suggestedMkspecList().contains(spec); return qtAbis.contains(tc->targetAbi()) && tc->suggestedMkspecList().contains(spec);
@@ -256,7 +256,7 @@ static const QList<ToolChain *> preferredToolChains(BaseQtVersion *qtVersion, co
ToolChain * const cToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) { ToolChain * const cToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) {
return tc->language() == ProjectExplorer::Constants::C_LANGUAGE_ID && matcher(tc); return tc->language() == ProjectExplorer::Constants::C_LANGUAGE_ID && matcher(tc);
}); });
QList<ToolChain *> chosenToolchains; Toolchains chosenToolchains;
for (ToolChain * const tc : {cxxToolchain, cToolchain}) { for (ToolChain * const tc : {cxxToolchain, cToolchain}) {
if (tc) if (tc)
chosenToolchains << tc; chosenToolchains << tc;

View File

@@ -170,10 +170,10 @@ void QnxConfiguration::deactivate()
if (!isActive()) if (!isActive())
return; return;
QList<DebuggerItem> debuggersToRemove; const Toolchains toolChainsToRemove =
const QList<ToolChain *> toolChainsToRemove ToolChainManager::toolchains(Utils::equal(&ToolChain::compilerCommand, qccCompilerPath()));
= ToolChainManager::toolChains(Utils::equal(&ToolChain::compilerCommand, qccCompilerPath()));
QList<DebuggerItem> debuggersToRemove;
foreach (DebuggerItem debuggerItem, foreach (DebuggerItem debuggerItem,
DebuggerItemManager::debuggers()) { DebuggerItemManager::debuggers()) {
if (findTargetByDebuggerPath(debuggerItem.command())) if (findTargetByDebuggerPath(debuggerItem.command()))
@@ -187,7 +187,7 @@ void QnxConfiguration::deactivate()
KitManager::deregisterKit(kit); KitManager::deregisterKit(kit);
} }
foreach (ToolChain *tc, toolChainsToRemove) for (ToolChain *tc : toolChainsToRemove)
ToolChainManager::deregisterToolChain(tc); ToolChainManager::deregisterToolChain(tc);
foreach (DebuggerItem debuggerItem, debuggersToRemove) foreach (DebuggerItem debuggerItem, debuggersToRemove)

View File

@@ -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. // 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 // This is required to make non-static qmakes work on windows where every tool chain
// tries to be incompatible with any other. // tries to be incompatible with any other.
Abis abiList = Abi::abisOfBinary(binary); const Abis abiList = Abi::abisOfBinary(binary);
const QList<ToolChain *> tcList const Toolchains tcList = ToolChainManager::toolchains([&abiList](const ToolChain *t) {
= ToolChainManager::toolChains([&abiList](const ToolChain *t) { return abiList.contains(t->targetAbi()); }); return abiList.contains(t->targetAbi());
});
for (ToolChain *tc : tcList) { for (ToolChain *tc : tcList) {
Environment realEnv = env; Environment realEnv = env;
tc->addToEnvironment(realEnv); tc->addToEnvironment(realEnv);

View File

@@ -219,7 +219,7 @@ void QtKitAspect::fix(Kit *k)
return; return;
const QString spec = version->mkspec(); const QString spec = version->mkspec();
QList<ToolChain *> 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) if (!t->isValid() || t->language() != ProjectExplorer::Constants::CXX_LANGUAGE_ID)
return false; return false;
return Utils::anyOf(version->qtAbis(), [t](const Abi &qtAbi) { return Utils::anyOf(version->qtAbis(), [t](const Abi &qtAbi) {
@@ -243,8 +243,7 @@ void QtKitAspect::fix(Kit *k)
return tc1->priority() > tc2->priority(); return tc1->priority() > tc2->priority();
}); });
const QList<ToolChain *> goodTcs = Utils::filtered(possibleTcs, const Toolchains goodTcs = Utils::filtered(possibleTcs, [&spec](const ToolChain *t) {
[&spec](const ToolChain *t) {
return t->suggestedMkspecList().contains(spec); return t->suggestedMkspecList().contains(spec);
}); });
// Hack to prefer a tool chain from PATH (e.g. autodetected) over other matches. // Hack to prefer a tool chain from PATH (e.g. autodetected) over other matches.