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 <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2017-03-27 14:57:24 +02:00
parent 767d988891
commit 437af83c9a

View File

@@ -38,6 +38,7 @@
#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectnodes.h>
#include <projectexplorer/projecttree.h> #include <projectexplorer/projecttree.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
@@ -59,6 +60,8 @@
#include <QTextStream> #include <QTextStream>
#include <QTimer> #include <QTimer>
#include <QRegExp> #include <QRegExp>
#include <QSet>
#include <QString>
#include <QLibraryInfo> #include <QLibraryInfo>
#include <qglobal.h> #include <qglobal.h>
@@ -74,20 +77,18 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject(
Project *project) const Project *project) const
{ {
ModelManagerInterface::ProjectInfo projectInfo(project); ModelManagerInterface::ProjectInfo projectInfo(project);
Target *activeTarget = 0; Target *activeTarget = nullptr;
if (project) { if (project) {
QSet<QString> qmlTypeNames; const QSet<QString> qmlTypeNames = { Constants::QML_MIMETYPE ,Constants::QBS_MIMETYPE,
qmlTypeNames << QLatin1String(Constants::QML_MIMETYPE) Constants::QMLPROJECT_MIMETYPE,
<< QLatin1String(Constants::QBS_MIMETYPE) Constants::QMLTYPES_MIMETYPE,
<< QLatin1String(Constants::QMLPROJECT_MIMETYPE) Constants::QMLUI_MIMETYPE };
<< QLatin1String(Constants::QMLTYPES_MIMETYPE) projectInfo.sourceFiles = project->files(Project::SourceFiles,
<< QLatin1String(Constants::QMLUI_MIMETYPE); [&qmlTypeNames](const FileNode *fn) {
foreach (const QString &filePath, project->files(Project::SourceFiles)) { return fn->fileType() == FileType::QML
if (qmlTypeNames.contains(Utils::mimeTypeForFile( && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(),
filePath, MimeMatchMode::MatchExtension).name())) { MimeMatchMode::MatchExtension).name());
projectInfo.sourceFiles << filePath; });
}
}
activeTarget = project->activeTarget(); activeTarget = project->activeTarget();
} }
Kit *activeKit = activeTarget ? activeTarget->kit() : KitManager::defaultKit(); Kit *activeKit = activeTarget ? activeTarget->kit() : KitManager::defaultKit();