From 9deef74d9ed1ac83664c138ec2ada88a1dc4c061 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 28 Nov 2022 19:16:08 +0100 Subject: [PATCH] CMakePM: Allow presets inherits for deeper hierarchies Fixes: QTCREATORBUG-28498 Change-Id: Idea5cdec6ad6acfba289dd77632770b7dfbf64f2 Reviewed-by: Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index ad4c685d3f5..ce490d17714 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -96,14 +96,24 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP for (const auto &p : presets) presetsHash.insert(p.name, p); - auto resolveInherits = [](const auto &presetsHash, auto &presetsList) { + auto resolveInherits = [](auto &presetsHash, auto &presetsList) { + Utils::sort(presetsList, [](const auto &left, const auto &right) { + if (left.inherits) { + if (left.inherits.value().contains(right.name)) + return false; + } + return true; + }); for (auto &p : presetsList) { if (!p.inherits) continue; - for (const QString &inheritFromName : p.inherits.value()) - if (presetsHash.contains(inheritFromName)) + for (const QString &inheritFromName : p.inherits.value()) { + if (presetsHash.contains(inheritFromName)) { p.inheritFrom(presetsHash[inheritFromName]); + presetsHash[p.name] = p; + } + } } };