aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-09-14 16:32:50 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2020-09-21 11:57:03 +0000
commit781a4484a143919c9047fa8f669d4e8672fa6973 (patch)
treedf387df3c16a4358f6d7892ad88a5b849bb3b658 /src
parentda2e8bbf7ba3300b7c41220071fbcdd2d2a8d9ef (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.cpp13
-rw-r--r--src/plugins/projectexplorer/kit.h3
-rw-r--r--src/plugins/projectexplorer/kitmanager.cpp7
-rw-r--r--src/plugins/projectexplorer/project.cpp1
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 "