From 54cf91b45b592fb5cd863747036abc438f09fb46 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 12 Jan 2017 10:31:44 +0100 Subject: [PATCH] QtVersionManager: Remove QtVersionManager::versions(...) This call used to return a sorted list of BaseQtVersion *, which is expensive as sorting might imply running qmake for all Qt versions. This also makes BaseQtVersion::validVersions(...) return an unsorted list, so go over all usages of validVersions(...) and use QtVersionManager::sortVersions(...) where that is necessary. Change-Id: I8f5dda20fc0819134c64f6a1ca32512500f71710 Reviewed-by: Tim Jenssen --- src/plugins/qtsupport/exampleslistmodel.cpp | 5 +++-- src/plugins/qtsupport/qtprojectimporter.cpp | 7 ++----- src/plugins/qtsupport/qtversionmanager.cpp | 11 +---------- src/plugins/qtsupport/qtversionmanager.h | 1 - src/plugins/winrt/winrtdevicefactory.cpp | 5 +++-- 5 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index ad88fe6358d..0b9dba32a98 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -487,9 +487,10 @@ void ExamplesListModel::updateExamples() void ExamplesListModel::updateQtVersions() { - QList versions = QtVersionManager::validVersions([](const BaseQtVersion *v) { + QList versions + = QtVersionManager::sortVersions(QtVersionManager::validVersions([](const BaseQtVersion *v) { return v->hasExamples() || v->hasDemos(); - }); + })); // prioritize default qt version ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit(); diff --git a/src/plugins/qtsupport/qtprojectimporter.cpp b/src/plugins/qtsupport/qtprojectimporter.cpp index ab18e380f18..e21dc1ef3bc 100644 --- a/src/plugins/qtsupport/qtprojectimporter.cpp +++ b/src/plugins/qtsupport/qtprojectimporter.cpp @@ -381,11 +381,8 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() setupQmake(defaultQt, tempDir1.path()), setupQmake(defaultQt, tempDir2.path()) }; - for (int i = 1; i < qmakePaths.count(); ++i) { - const Utils::FileName qp = qmakePaths.at(i); - QVERIFY(!Utils::contains(QtVersionManager::versions(), - [qp](BaseQtVersion *qt) { return qt->qmakeCommand() == qp; })); - } + for (int i = 1; i < qmakePaths.count(); ++i) + QVERIFY(!QtVersionManager::version(Utils::equal(&BaseQtVersion::qmakeCommand, qmakePaths.at(i)))); QList testData; diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 0da7d448c70..18ec5f116c8 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -511,15 +511,6 @@ QList QtVersionManager::unsortedVersions(const BaseQtVersion::P return m_versions.values(); } -QList QtVersionManager::versions(const BaseQtVersion::Predicate &predicate) -{ - QList versions; - QTC_ASSERT(isLoaded(), return versions); - versions = unsortedVersions(predicate); - Utils::sort(versions, qtVersionNumberCompare); - return versions; -} - QList QtVersionManager::sortVersions(const QList &input) { QList result = input; @@ -532,7 +523,7 @@ QList QtVersionManager::validVersions(const BaseQtVersion::Pred QTC_ASSERT(isLoaded(), return { }); auto superPredicate = [predicate](const BaseQtVersion *v) { return v->isValid() && (!predicate || predicate(v)); }; - return versions(superPredicate); + return unsortedVersions(superPredicate); } bool QtVersionManager::isValidId(int id) diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h index 38d26b30753..66fe047fbbb 100644 --- a/src/plugins/qtsupport/qtversionmanager.h +++ b/src/plugins/qtsupport/qtversionmanager.h @@ -47,7 +47,6 @@ public: // This will *always* return at least one (Qt in Path), even if that is // unconfigured. // Sorting is slow due to needing to potentially run qmake --query for each version - static QList versions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate()); static QList validVersions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate()); static QList unsortedVersions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate()); diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp index f4f676cd425..67727fa5ef6 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -172,10 +172,11 @@ QString WinRtDeviceFactory::findRunnerFilePath() const { const QString winRtRunnerExe = QStringLiteral("/winrtrunner.exe"); const QList winrtVersions - = QtVersionManager::validVersions([](const BaseQtVersion *v) { + = QtVersionManager::sortVersions( + QtVersionManager::validVersions([](const BaseQtVersion *v) { return v->type() == QLatin1String(Constants::WINRT_WINRTQT) || v->type() == QLatin1String(Constants::WINRT_WINPHONEQT); - }); + })); QString filePath; BaseQtVersion *qt = nullptr; for (BaseQtVersion *v : winrtVersions) {