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>
This commit is contained in:
Christian Kandeler
2020-09-14 16:32:50 +02:00
parent da2e8bbf7b
commit 781a4484a1
4 changed files with 24 additions and 0 deletions

View File

@@ -736,4 +736,17 @@ void Kit::kitUpdated()
d->m_mustNotify = false; 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 } // namespace ProjectExplorer

View File

@@ -132,6 +132,9 @@ public:
void setMutable(Utils::Id id, bool b); void setMutable(Utils::Id id, bool b);
bool isMutable(Utils::Id id) const; bool isMutable(Utils::Id id) const;
void makeReplacementKit();
bool isReplacementKit() const;
void setIrrelevantAspects(const QSet<Utils::Id> &irrelevant); void setIrrelevantAspects(const QSet<Utils::Id> &irrelevant);
QSet<Utils::Id> irrelevantAspects() const; QSet<Utils::Id> irrelevantAspects() const;

View File

@@ -235,6 +235,13 @@ void KitManager::restoreKits()
// Delete all loaded autodetected kits that were not rediscovered: // Delete all loaded autodetected kits that were not rediscovered:
kitsToCheck.clear(); 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) { static const auto kitMatchesAbiList = [](const Kit *kit, const Abis &abis) {
const QList<ToolChain *> toolchains = ToolChainKitAspect::toolChains(kit); const QList<ToolChain *> toolchains = ToolChainKitAspect::toolChains(kit);
for (const ToolChain * const tc : toolchains) { for (const ToolChain * const tc : toolchains) {

View File

@@ -776,6 +776,7 @@ void Project::createTargetFromMap(const QVariantMap &map, int index)
Utils::transform(KitManager::kits(), &Kit::unexpandedDisplayName)); Utils::transform(KitManager::kits(), &Kit::unexpandedDisplayName));
kit->setUnexpandedDisplayName(tempKitName); kit->setUnexpandedDisplayName(tempKitName);
DeviceTypeKitAspect::setDeviceTypeId(kit, deviceTypeId); DeviceTypeKitAspect::setDeviceTypeId(kit, deviceTypeId);
kit->makeReplacementKit();
kit->setup(); kit->setup();
}, id); }, id);
TaskHub::addTask(BuildSystemTask(Task::Warning, tr("Project \"%1\" was configured for " TaskHub::addTask(BuildSystemTask(Task::Warning, tr("Project \"%1\" was configured for "