diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index e4f592306fd..987b647d871 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -21,8 +21,8 @@ #include #include #include -#include #include +#include #include @@ -33,6 +33,7 @@ #include #include #include +#include using namespace ProjectExplorer; using namespace Utils; @@ -514,11 +515,10 @@ using DocumentationFile = std::pair; using DocumentationFiles = QList; using AllDocumentationFiles = QHash; -static DocumentationFiles allDocumentationFiles(QtVersion *v) +static DocumentationFiles allDocumentationFiles(const QString &docsPath) { DocumentationFiles files; - const QStringList docPaths = QStringList( - {v->docsPath().toString() + QChar('/'), v->docsPath().toString() + "/qch/"}); + const QStringList docPaths{docsPath + QChar('/'), docsPath + "/qch/"}; for (const QString &docPath : docPaths) { const QDir versionHelpDir(docPath); for (const QString &helpFile : versionHelpDir.entryList(QStringList("q*.qch"), QDir::Files)) @@ -529,10 +529,18 @@ static DocumentationFiles allDocumentationFiles(QtVersion *v) static AllDocumentationFiles allDocumentationFiles(const QtVersions &versions) { - AllDocumentationFiles result; - for (QtVersion *v : versions) - result.insert(v, allDocumentationFiles(v)); - return result; + QList> versionsWithDocPath; + for (QtVersion *v : versions) { + if (v->hasDocs() && !v->docsPath().needsDevice()) + versionsWithDocPath << qMakePair(v, v->docsPath().path()); + } + QFuture> future = QtConcurrent::mapped( + versionsWithDocPath, [](const QPair &versionWithDoc) { + return qMakePair(versionWithDoc.first, allDocumentationFiles(versionWithDoc.second)); + }); + future.waitForFinished(); + return Utils::transform( + future.results(), [](const QPair &r) { return r; }); } static QStringList documentationFiles(const QtVersions &vs,