summaryrefslogtreecommitdiff
path: root/src/plugins/qmakeprojectmanager
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-02-03 12:38:08 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2020-02-04 11:01:01 +0000
commit37aecdd112e496c4f246aed87f6ffaee15f9d4f9 (patch)
treebe6825963771c4206b7320694d43efc4e90f3736 /src/plugins/qmakeprojectmanager
parent9fbdeca35c3621dadc3b5844622671bc1de7c9e2 (diff)
downloadqt-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')
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.h1
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp10
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.h1
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);