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 <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-01-12 10:31:44 +01:00
parent 14edd0a0c2
commit 54cf91b45b
5 changed files with 9 additions and 20 deletions

View File

@@ -487,9 +487,10 @@ void ExamplesListModel::updateExamples()
void ExamplesListModel::updateQtVersions()
{
QList<BaseQtVersion*> versions = QtVersionManager::validVersions([](const BaseQtVersion *v) {
QList<BaseQtVersion*> versions
= QtVersionManager::sortVersions(QtVersionManager::validVersions([](const BaseQtVersion *v) {
return v->hasExamples() || v->hasDemos();
});
}));
// prioritize default qt version
ProjectExplorer::Kit *defaultKit = ProjectExplorer::KitManager::defaultKit();

View File

@@ -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<DirectoryData *> testData;

View File

@@ -511,15 +511,6 @@ QList<BaseQtVersion *> QtVersionManager::unsortedVersions(const BaseQtVersion::P
return m_versions.values();
}
QList<BaseQtVersion *> QtVersionManager::versions(const BaseQtVersion::Predicate &predicate)
{
QList<BaseQtVersion *> versions;
QTC_ASSERT(isLoaded(), return versions);
versions = unsortedVersions(predicate);
Utils::sort(versions, qtVersionNumberCompare);
return versions;
}
QList<BaseQtVersion *> QtVersionManager::sortVersions(const QList<BaseQtVersion *> &input)
{
QList<BaseQtVersion *> result = input;
@@ -532,7 +523,7 @@ QList<BaseQtVersion *> 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)

View File

@@ -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<BaseQtVersion *> versions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate());
static QList<BaseQtVersion *> validVersions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate());
static QList<BaseQtVersion *> unsortedVersions(const BaseQtVersion::Predicate &predicate = BaseQtVersion::Predicate());

View File

@@ -172,10 +172,11 @@ QString WinRtDeviceFactory::findRunnerFilePath() const
{
const QString winRtRunnerExe = QStringLiteral("/winrtrunner.exe");
const QList<BaseQtVersion *> 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) {