From 437af83c9ad8ae31e8f72b49765ebfc560dcfc7b Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 27 Mar 2017 14:57:24 +0200 Subject: [PATCH] QmlJSModelManager: Avoid needless Mime database lookups This speeds up processing of a cmake project without any QML files by a factor of 16 on my machine. Task-number: QTCREATORBUG-17884 Change-Id: I823d4a051451adbca10a8b73c17d288e03387378 Reviewed-by: Orgad Shaneh --- src/plugins/qmljstools/qmljsmodelmanager.cpp | 27 ++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index cfbde13308e..e13bbb3e292 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -59,6 +60,8 @@ #include #include #include +#include +#include #include #include @@ -74,20 +77,18 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject( Project *project) const { ModelManagerInterface::ProjectInfo projectInfo(project); - Target *activeTarget = 0; + Target *activeTarget = nullptr; if (project) { - QSet qmlTypeNames; - qmlTypeNames << QLatin1String(Constants::QML_MIMETYPE) - << QLatin1String(Constants::QBS_MIMETYPE) - << QLatin1String(Constants::QMLPROJECT_MIMETYPE) - << QLatin1String(Constants::QMLTYPES_MIMETYPE) - << QLatin1String(Constants::QMLUI_MIMETYPE); - foreach (const QString &filePath, project->files(Project::SourceFiles)) { - if (qmlTypeNames.contains(Utils::mimeTypeForFile( - filePath, MimeMatchMode::MatchExtension).name())) { - projectInfo.sourceFiles << filePath; - } - } + const QSet qmlTypeNames = { Constants::QML_MIMETYPE ,Constants::QBS_MIMETYPE, + Constants::QMLPROJECT_MIMETYPE, + Constants::QMLTYPES_MIMETYPE, + Constants::QMLUI_MIMETYPE }; + projectInfo.sourceFiles = project->files(Project::SourceFiles, + [&qmlTypeNames](const FileNode *fn) { + return fn->fileType() == FileType::QML + && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(), + MimeMatchMode::MatchExtension).name()); + }); activeTarget = project->activeTarget(); } Kit *activeKit = activeTarget ? activeTarget->kit() : KitManager::defaultKit();