From 781a4484a143919c9047fa8f669d4e8672fa6973 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 14 Sep 2020 16:32:50 +0200 Subject: [PATCH] ProjectExplorer: Remove replacement kits ... for which the original kit has turned up again. Otherwise we'd have more than one kit with the same id. Fixes: QTCREATORBUG-24589 Change-Id: I7ce16615694d3d2c5a5441f676ecb7dc85c2239c Reviewed-by: David Schulz --- src/plugins/projectexplorer/kit.cpp | 13 +++++++++++++ src/plugins/projectexplorer/kit.h | 3 +++ src/plugins/projectexplorer/kitmanager.cpp | 7 +++++++ src/plugins/projectexplorer/project.cpp | 1 + 4 files changed, 24 insertions(+) diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index e38c78fbc88..949b3c480ef 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -736,4 +736,17 @@ void Kit::kitUpdated() d->m_mustNotify = false; } + +static Id replacementKey() { return "IsReplacementKit"; } + +void ProjectExplorer::Kit::makeReplacementKit() +{ + setValueSilently(replacementKey(), true); +} + +bool Kit::isReplacementKit() const +{ + return value(replacementKey()).toBool(); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 24d16b3ed92..f7c75c50296 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -132,6 +132,9 @@ public: void setMutable(Utils::Id id, bool b); bool isMutable(Utils::Id id) const; + void makeReplacementKit(); + bool isReplacementKit() const; + void setIrrelevantAspects(const QSet &irrelevant); QSet irrelevantAspects() const; diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 14288d7bb2b..70151b58002 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -235,6 +235,13 @@ void KitManager::restoreKits() // Delete all loaded autodetected kits that were not rediscovered: kitsToCheck.clear(); + // Remove replacement kits for which the original kit has turned up again. + erase(resultList, [&resultList](const std::unique_ptr &k) { + return k->isReplacementKit() && contains(resultList, [&k](const std::unique_ptr &other) { + return other->id() == k->id() && other != k; + }); + }); + static const auto kitMatchesAbiList = [](const Kit *kit, const Abis &abis) { const QList toolchains = ToolChainKitAspect::toolChains(kit); for (const ToolChain * const tc : toolchains) { diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 7f32733e1aa..1ae6d334709 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -776,6 +776,7 @@ void Project::createTargetFromMap(const QVariantMap &map, int index) Utils::transform(KitManager::kits(), &Kit::unexpandedDisplayName)); kit->setUnexpandedDisplayName(tempKitName); DeviceTypeKitAspect::setDeviceTypeId(kit, deviceTypeId); + kit->makeReplacementKit(); kit->setup(); }, id); TaskHub::addTask(BuildSystemTask(Task::Warning, tr("Project \"%1\" was configured for "