From 7f1e16172a6a8a0a66c8505df80fcf156a26f894 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 9 Feb 2024 18:02:51 +0100 Subject: [PATCH] CMakePM: Traverse the whole inheritance tree for Presets Regarding QTCREATORBUG-30288, before this change I was getting on macOS presets for Linux and Windows. Fixes: QTCREATORBUG-30236 Fixes: QTCREATORBUG-30288 Change-Id: I4772ab7d14dec857b68164d4c24e6e904f20c88b Reviewed-by: Alessandro Portale --- .../cmakeprojectmanager/cmakeproject.cpp | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 3a79e4a376e..7318c7a791f 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -89,6 +89,21 @@ PresetsData CMakeProject::presetsData() const return m_presetsData; } +template +static QStringList recursiveInheritsList(const T &presetsHash, const QStringList &inheritsList) +{ + QStringList result; + for (const QString &inheritFrom : inheritsList) { + result << inheritFrom; + if (presetsHash.contains(inheritFrom)) { + auto item = presetsHash[inheritFrom]; + if (item.inherits) + result << recursiveInheritsList(presetsHash, item.inherits.value()); + } + } + return result; +} + Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakePresetsData, Internal::PresetsData &cmakeUserPresetsData) { @@ -135,12 +150,14 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP if (!p.inherits) continue; - for (const QString &inheritFromName : p.inherits.value()) { - if (presetsHash.contains(inheritFromName)) { - p.inheritFrom(presetsHash[inheritFromName]); + const QStringList inheritsList = recursiveInheritsList(presetsHash, + p.inherits.value()); + Utils::reverseForeach(inheritsList, [&presetsHash, &p](const QString &inheritFrom) { + if (presetsHash.contains(inheritFrom)) { + p.inheritFrom(presetsHash[inheritFrom]); presetsHash[p.name] = p; } - } + }); } };