From 0ceec57c0872ed757dd0a0936725abbf05dd9221 Mon Sep 17 00:00:00 2001 From: Sami Shalayel Date: Thu, 27 Feb 2025 11:32:54 +0100 Subject: [PATCH] qmlls: don't check qmake versions for latest qmlls Don't search for QMake versions in Qt kits when searching for the latest qmlls version currently available. Also clean up the code a bit, and break ties of Qt kits of the same versions with their unique id, so that always the same qmlls is used when multiple ones are available with the same version. This happens for example when you have multiple Qt builds (one debug, one release, one for documentation) based on the same source. Change-Id: I0eb90d15c4e2b7c28c50f7ac1d3f976386b9b031 Reviewed-by: hjk Reviewed-by: Fabian Kosmale Reviewed-by: Ulf Hermann --- .../qmljseditor/qmllsclientsettings.cpp | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/plugins/qmljseditor/qmllsclientsettings.cpp b/src/plugins/qmljseditor/qmllsclientsettings.cpp index 88b1b6f5152..ca64d235529 100644 --- a/src/plugins/qmljseditor/qmllsclientsettings.cpp +++ b/src/plugins/qmljseditor/qmllsclientsettings.cpp @@ -74,34 +74,30 @@ static QtVersion *qtVersionFromProject(const Project *project) static std::pair evaluateLatestQmlls() { - // find latest qmlls, i.e. vals if (!QtVersionManager::isLoaded()) return {}; + const QtVersions versions = QtVersionManager::versions(); FilePath latestQmlls; QVersionNumber latestVersion; - FilePath latestQmakeFilePath; int latestUniqueId = std::numeric_limits::min(); - for (QtVersion *v : versions) { - // check if we find qmlls - QVersionNumber vNow = v->qtVersion(); - FilePath qmllsNow = QmlJS::ModelManagerInterface::qmllsForBinPath(v->hostBinPath(), vNow); - if (!qmllsNow.isExecutableFile()) + + for (QtVersion *qtVersion : versions) { + const QVersionNumber version = qtVersion->qtVersion(); + const int uniqueId = qtVersion->uniqueId(); + + // note: break ties between qt kits of same versions by selecting the qt kit with the highest id + if (std::tie(version, uniqueId) < std::tie(latestVersion, latestUniqueId)) continue; - if (latestVersion > vNow) + + const FilePath qmlls + = QmlJS::ModelManagerInterface::qmllsForBinPath(qtVersion->hostBinPath(), version); + if (!qmlls.isExecutableFile()) continue; - FilePath qmakeNow = v->qmakeFilePath(); - int uniqueIdNow = v->uniqueId(); - if (latestVersion == vNow) { - if (latestQmakeFilePath > qmakeNow) - continue; - if (latestQmakeFilePath == qmakeNow && latestUniqueId >= v->uniqueId()) - continue; - } - latestVersion = vNow; - latestQmlls = qmllsNow; - latestQmakeFilePath = qmakeNow; - latestUniqueId = uniqueIdNow; + + latestVersion = version; + latestQmlls = qmlls; + latestUniqueId = uniqueId; } return std::make_pair(latestQmlls, latestVersion); }