diff --git a/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp b/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp index 885ca4869c6..7d70354c834 100644 --- a/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp +++ b/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp @@ -58,8 +58,9 @@ QnxDeployQtLibrariesDialog::QnxDeployQtLibrariesDialog(const IDevice::ConstPtr & m_ui->setupUi(this); const QList qtVersions - = QtVersionManager::validVersions(Utils::equal(&BaseQtVersion::type, - QString::fromLatin1(Constants::QNX_QNX_QT))); + = QtVersionManager::sortVersions( + QtVersionManager::versions(BaseQtVersion::isValidPredicate(Utils::equal(&BaseQtVersion::type, + QString::fromLatin1(Constants::QNX_QNX_QT))))); for (BaseQtVersion *v : qtVersions) m_ui->qtLibraryCombo->addItem(v->displayName(), v->uniqueId()); diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index acb9f483268..7cb6a4f944b 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -647,6 +647,13 @@ bool BaseQtVersion::isValid() const && m_qmakeIsExecutable; } +BaseQtVersion::Predicate BaseQtVersion::isValidPredicate(const BaseQtVersion::Predicate &predicate) +{ + if (predicate) + return [predicate](const BaseQtVersion *v) { return v->isValid() && predicate(v); }; + return [](const BaseQtVersion *v) { return v->isValid(); }; +} + QString BaseQtVersion::invalidReason() const { if (displayName().isEmpty()) diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 421d6cab531..6701c123b3e 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -109,6 +109,7 @@ public: virtual QVariantMap toMap() const; virtual bool isValid() const; + static Predicate isValidPredicate(const Predicate &predicate = Predicate()); virtual QString invalidReason() const; virtual QStringList warningReason() const; diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 0b9dba32a98..645a66f80e7 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -488,9 +488,10 @@ void ExamplesListModel::updateExamples() void ExamplesListModel::updateQtVersions() { QList versions - = QtVersionManager::sortVersions(QtVersionManager::validVersions([](const BaseQtVersion *v) { + = QtVersionManager::sortVersions( + QtVersionManager::versions(BaseQtVersion::isValidPredicate([](const BaseQtVersion *v) { return v->hasExamples() || v->hasDemos(); - })); + }))); // prioritize default qt version ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit(); diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 21d8dd81909..cc3246e41a6 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -518,14 +518,6 @@ QList QtVersionManager::sortVersions(const QList QtVersionManager::validVersions(const BaseQtVersion::Predicate &predicate) -{ - QTC_ASSERT(isLoaded(), return { }); - auto superPredicate - = [predicate](const BaseQtVersion *v) { return v->isValid() && (!predicate || predicate(v)); }; - return versions(superPredicate); -} - bool QtVersionManager::isValidId(int id) { QTC_ASSERT(isLoaded(), return false); diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h index 0e8e4894aaf..2b2959db8d2 100644 --- a/src/plugins/qtsupport/qtversionmanager.h +++ b/src/plugins/qtsupport/qtversionmanager.h @@ -45,21 +45,19 @@ public: static bool isLoaded(); // 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 validVersions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate()); - + // unconfigured. The lists here are in load-time order! Use sortVersions(...) if you + // need a list sorted by Qt Version number. + // + // Note: DO NOT STORE THESE POINTERS! + // The QtVersionManager may delete them at random times and you will + // need to get a new pointer by calling this function again! static QList versions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate()); + static BaseQtVersion *version(int id); + static BaseQtVersion *version(const BaseQtVersion::Predicate &predicate); // Sorting is potentially expensive since it might require qmake --query to run for each version! static QList sortVersions(const QList &input); - // 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! - static BaseQtVersion *version(int id); - static BaseQtVersion *version(const BaseQtVersion::Predicate &predicate); - static BaseQtVersion *qtVersionForQMakeBinary(const Utils::FileName &qmakePath); static void addVersion(BaseQtVersion *version); diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp index 67727fa5ef6..c3d04447a0e 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -173,10 +173,10 @@ QString WinRtDeviceFactory::findRunnerFilePath() const const QString winRtRunnerExe = QStringLiteral("/winrtrunner.exe"); const QList winrtVersions = QtVersionManager::sortVersions( - QtVersionManager::validVersions([](const BaseQtVersion *v) { + QtVersionManager::versions(BaseQtVersion::isValidPredicate([](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) {