From f1eac5f30a1f0274ae3808f7751695c38ac4b254 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 12 Mar 2019 11:49:39 +0100 Subject: [PATCH] Android: Simplify Kit creation logic a bit Instead of creating and destroying in some cases only create the ones that will be used. Change-Id: I5c3200101ec21b4a4cf1e3c6e91bf94153278b5c Reviewed-by: Christian Kandeler --- src/plugins/android/androidconfigurations.cpp | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index d3fa85a9300..548b2672dcd 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -974,17 +974,6 @@ static bool matchToolChain(const ToolChain *atc, const ToolChain *btc) return aatc->targetAbi() == abtc->targetAbi(); } -static bool matchKits(const Kit *a, const Kit *b) -{ - if (QtSupport::QtKitAspect::qtVersion(a) != QtSupport::QtKitAspect::qtVersion(b)) - return false; - - return matchToolChain(ToolChainKitAspect::toolChain(a, ProjectExplorer::Constants::CXX_LANGUAGE_ID), - ToolChainKitAspect::toolChain(b, ProjectExplorer::Constants::CXX_LANGUAGE_ID)) - && matchToolChain(ToolChainKitAspect::toolChain(a, ProjectExplorer::Constants::C_LANGUAGE_ID), - ToolChainKitAspect::toolChain(b, ProjectExplorer::Constants::C_LANGUAGE_ID)); -} - void AndroidConfigurations::registerNewToolChains() { const QList existingAndroidToolChains @@ -1073,6 +1062,10 @@ void AndroidConfigurations::updateAutomaticKitList() return tc->targetAbi() == otherTc->targetAbi(); }); + QHash toolChainForLanguage; + for (ToolChain *tc : allLanguages) + toolChainForLanguage[tc->language()] = tc; + auto initBasicKitData = [allLanguages, device](Kit *k, const QtSupport::BaseQtVersion *qt) { k->setAutoDetected(true); k->setAutoDetectionSource("AndroidConfiguration"); @@ -1092,24 +1085,27 @@ void AndroidConfigurations::updateAutomaticKitList() }; for (const QtSupport::BaseQtVersion *qt : qtVersionsForArch.value(tc->targetAbi())) { - Kit *existingKit = nullptr; - const auto initializeKit = [&](Kit *k) { - initBasicKitData(k, qt); - existingKit = Utils::findOrDefault(existingKits, [k](const Kit *existing) { - return matchKits(k, existing); - }); - if (existingKit) + Kit *existingKit = Utils::findOrDefault(existingKits, [&](const Kit *b) { + if (qt != QtSupport::QtKitAspect::qtVersion(b)) return false; - initStage2(k, qt); - return true; - }; - Kit * const newKit = KitManager::registerKit(initializeKit); - QTC_ASSERT(!newKit != !existingKit, continue); - if (!newKit) { + return matchToolChain(toolChainForLanguage[ProjectExplorer::Constants::CXX_LANGUAGE_ID], + ToolChainKitAspect::toolChain(b, ProjectExplorer::Constants::CXX_LANGUAGE_ID)) + && matchToolChain(toolChainForLanguage[ProjectExplorer::Constants::C_LANGUAGE_ID], + ToolChainKitAspect::toolChain(b, ProjectExplorer::Constants::C_LANGUAGE_ID)); + }); + if (existingKit) { // Existing kit found. // Update the existing kit with new data. initBasicKitData(existingKit, qt); initStage2(existingKit, qt); + } else { + const auto initializeKit = [&](Kit *k) { + initBasicKitData(k, qt); + initStage2(k, qt); + return true; + }; + Kit * const newKit = KitManager::registerKit(initializeKit); + QTC_CHECK(!newKit != !existingKit); } } }