diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2020-02-03 12:38:08 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2020-02-04 11:01:01 +0000 |
commit | 37aecdd112e496c4f246aed87f6ffaee15f9d4f9 (patch) | |
tree | be6825963771c4206b7320694d43efc4e90f3736 /src/plugins/qmakeprojectmanager | |
parent | 9fbdeca35c3621dadc3b5844622671bc1de7c9e2 (diff) | |
download | qt-creator-37aecdd112e496c4f246aed87f6ffaee15f9d4f9.tar.gz |
QmakeProjectManager: Do not keep an IDocument in QmakePriFile
Instead, we keep the IDocuments as "extra project files" in the Project
class, like the other project managers do it.
This has two advantages:
- The document is no longer created in a parser thread
callback, improving Qt Creator responsiveness while
loading a project.
- The IDocuments no longer get needlessly destroyed
and re-created on a re-parse.
This is relevant because adding these objects to the DocumentManager
results in the creation of file watchers, which is expensive.
Task-number: QTCREATORBUG-18533
Change-Id: I49c03377974e6b33340234dbabbbd82b8d0c827c
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/qmakeprojectmanager')
4 files changed, 11 insertions, 3 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index a226ca6400..4aec1f0204 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -182,8 +182,6 @@ void QmakePriFile::finishInitialization(QmakeBuildSystem *buildSystem, QmakeProF QTC_ASSERT(buildSystem, return); m_buildSystem = buildSystem; m_qmakeProFile = qmakeProFile; - m_priFileDocument = std::make_unique<QmakePriFileDocument>(this, filePath()); - Core::DocumentManager::addDocument(m_priFileDocument.get()); } FilePath QmakePriFile::filePath() const diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 9a5977348a..0812e16255 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -236,7 +236,6 @@ private: QmakePriFile *m_parent = nullptr; QVector<QmakePriFile *> m_children; - std::unique_ptr<Core::IDocument> m_priFileDocument; Utils::TextFileFormat m_textFormat; // Memory is cheap... diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index ca2a977258..91987e2574 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -259,6 +259,15 @@ void QmakeBuildSystem::updateCodeModels() updateQmlJSCodeModel(); } +void QmakeBuildSystem::updateDocuments() +{ + QVector<FilePath> projectDocuments; + project()->rootProjectNode()->forEachProjectNode([&projectDocuments](const ProjectNode *n) { + projectDocuments << n->filePath(); + }); + project()->setExtraProjectFiles(projectDocuments); +} + void QmakeBuildSystem::updateCppCodeModel() { m_toolChainWarnings.clear(); @@ -528,6 +537,7 @@ void QmakeBuildSystem::decrementPendingEvaluateFutures() m_asyncUpdateState = Base; updateBuildSystemData(); updateCodeModels(); + updateDocuments(); target()->updateDefaultDeployConfigurations(); m_guard.markAsSuccess(); // Qmake always returns (some) data, even when it failed:-) m_guard = {}; // This triggers emitParsingFinished by destroying the previous guard. diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 8c138e5499..04cad72c69 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -151,6 +151,7 @@ public: bool wasEvaluateCanceled(); void updateCodeModels(); + void updateDocuments(); void watchFolders(const QStringList &l, QmakePriFile *file); void unwatchFolders(const QStringList &l, QmakePriFile *file); |