diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2020-09-14 16:32:50 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2020-09-21 11:57:03 +0000 |
commit | 781a4484a143919c9047fa8f669d4e8672fa6973 (patch) | |
tree | df387df3c16a4358f6d7892ad88a5b849bb3b658 /src | |
parent | da2e8bbf7ba3300b7c41220071fbcdd2d2a8d9ef (diff) |
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 <david.schulz@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/projectexplorer/kit.cpp | 13 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kit.h | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanager.cpp | 7 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 1 |
4 files changed, 24 insertions, 0 deletions
diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index e38c78fbc8..949b3c480e 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 24d16b3ed9..f7c75c5029 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<Utils::Id> &irrelevant); QSet<Utils::Id> irrelevantAspects() const; diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 14288d7bb2..70151b5800 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<Kit> &k) { + return k->isReplacementKit() && contains(resultList, [&k](const std::unique_ptr<Kit> &other) { + return other->id() == k->id() && other != k; + }); + }); + static const auto kitMatchesAbiList = [](const Kit *kit, const Abis &abis) { const QList<ToolChain *> 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 7f32733e1a..1ae6d33470 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 " |