From 5f9d991062d497c9eddf2671ed8bf3be6040c79e Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Mon, 13 Jul 2015 13:09:45 +0200 Subject: [PATCH] Add QtVersionManager::unsortedVersions() To sort the list, we need to know the version number of all qt versions. That requires running the qmake. Since in most cases we don't need the sorted list at startup, add a method for that and use it. This prevents almost all calls to queryQmake for me, except for a few for Android Qt Versions. Change-Id: I6db89f214d68d07fee4b4dd15ee14c10d1248565 Reviewed-by: Orgad Shaneh Reviewed-by: Tobias Hunger --- src/plugins/android/androidconfigurations.cpp | 2 +- src/plugins/qtsupport/qtkitinformation.cpp | 4 ++-- src/plugins/qtsupport/qtversionmanager.cpp | 9 ++++++++- src/plugins/qtsupport/qtversionmanager.h | 3 +++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index eb9f0609e24..c15d0d8d96a 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -1302,7 +1302,7 @@ void AndroidConfigurations::updateAutomaticKitList() } QHash > qtVersionsForArch; - foreach (QtSupport::BaseQtVersion *qtVersion, QtSupport::QtVersionManager::versions()) { + foreach (QtSupport::BaseQtVersion *qtVersion, QtSupport::QtVersionManager::unsortedVersions()) { if (qtVersion->type() != QLatin1String(Constants::ANDROIDQT)) continue; QList qtAbis = qtVersion->qtAbis(); diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index c9a04cad215..c893b8ccf27 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -60,7 +60,7 @@ QVariant QtKitInformation::defaultValue(ProjectExplorer::Kit *k) const Q_UNUSED(k); // find "Qt in PATH": - QList versionList = QtVersionManager::versions(); + QList versionList = QtVersionManager::unsortedVersions(); BaseQtVersion *result = findOrDefault(versionList, [](const BaseQtVersion *v) { return v->autodetectionSource() == QLatin1String("PATH"); }); @@ -174,7 +174,7 @@ int QtKitInformation::qtVersionId(const ProjectExplorer::Kit *k) id = -1; } else { QString source = data.toString(); - foreach (BaseQtVersion *v, QtVersionManager::versions()) { + foreach (BaseQtVersion *v, QtVersionManager::unsortedVersions()) { if (v->autodetectionSource() != source) continue; id = v->uniqueId(); diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 7298eb319e8..3a44f6861db 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -354,7 +354,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal) qDebug() << ""; } } - foreach (BaseQtVersion *qtVersion, QtVersionManager::versions()) { + foreach (BaseQtVersion *qtVersion, m_versions) { if (qtVersion->autodetectionSource().startsWith(QLatin1String("SDK."))) { if (!sdkVersions.contains(qtVersion->autodetectionSource())) { if (debug) @@ -515,6 +515,13 @@ int QtVersionManager::getUniqueId() return m_idcount++; } +QList QtVersionManager::unsortedVersions() +{ + QList versions; + QTC_ASSERT(isLoaded(), return versions); + return m_versions.values(); +} + QList QtVersionManager::versions() { QList versions; diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h index 0754a566757..b99bb3e42d0 100644 --- a/src/plugins/qtsupport/qtversionmanager.h +++ b/src/plugins/qtsupport/qtversionmanager.h @@ -56,6 +56,9 @@ public: static QList versions(); static QList validVersions(); + // Sorting is slow due to needing to potentially run qmake --query for each version + static QList unsortedVersions(); + // Note: DO NOT STORE THIS POINTER! // The QtVersionManager will delete it at random times and you will // need to get a new pointer by calling this function again!