ToolChainManager: Allow for filtering of toolchains

Allow to provide a Predicate to ToolChainManager::toolChains and
add a ToolChainManager::toolChain method.

Change-Id: I0849f6fa67ffd8d5c6cfe4253cb0a326e1b023fa
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-01-11 16:12:32 +01:00
parent 6553c3c99e
commit a89100fe47
11 changed files with 60 additions and 69 deletions

View File

@@ -1224,9 +1224,8 @@ static bool matchKits(const Kit *a, const Kit *b)
void AndroidConfigurations::registerNewToolChains()
{
const QList<ToolChain *> existingAndroidToolChains
= Utils::filtered(ToolChainManager::toolChains(),
Utils::equal(&ToolChain::typeId, Core::Id(Constants::ANDROID_TOOLCHAIN_ID)));
= ToolChainManager::toolChains(Utils::equal(&ToolChain::typeId,
Core::Id(Constants::ANDROID_TOOLCHAIN_ID)));
const QList<ToolChain *> newToolchains
= AndroidToolChainFactory::autodetectToolChainsForNdk(AndroidConfigurations::currentConfig().ndkLocation(),
existingAndroidToolChains);
@@ -1236,11 +1235,9 @@ void AndroidConfigurations::registerNewToolChains()
void AndroidConfigurations::removeOldToolChains()
{
foreach (ToolChain *tc, ToolChainManager::toolChains()) {
if (tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID) {
if (!tc->isValid())
ToolChainManager::deregisterToolChain(tc);
}
foreach (ToolChain *tc, ToolChainManager::toolChains(Utils::equal(&ToolChain::typeId, Core::Id(Constants::ANDROID_TOOLCHAIN_ID)))) {
if (!tc->isValid())
ToolChainManager::deregisterToolChain(tc);
}
}
@@ -1289,11 +1286,12 @@ void AndroidConfigurations::updateAutomaticKitList()
}
// register new kits
const QList<ToolChain *> tmp = Utils::filtered(ToolChainManager::toolChains(), [](ToolChain *tc) {
QList<Kit *> newKits;
const QList<ToolChain *> tmp = ToolChainManager::toolChains([](const ToolChain *tc) {
return tc->isAutoDetected()
&& tc->isValid()
&& tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID
&& !static_cast<AndroidToolChain *>(tc)->isSecondaryToolChain();
&& !static_cast<const AndroidToolChain *>(tc)->isSecondaryToolChain();
});
const QList<AndroidToolChain *> toolchains = Utils::transform(tmp, [](ToolChain *tc) {
return static_cast<AndroidToolChain *>(tc);