From 269e699fd9595f8b2b978281e6e431a3fced3427 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 4 Nov 2016 09:31:46 +0100 Subject: [PATCH] CMake: Pass scanned files on to builddirreaders Change-Id: I226aeafe6800a84fe4bbf8cf6fd21b8237575a88 Reviewed-by: Tim Jenssen --- .../cmakeprojectmanager/builddirmanager.cpp | 23 ++++++++++++++++++- .../cmakeprojectmanager/builddirreader.h | 3 ++- .../cmakeprojectmanager/servermodereader.cpp | 3 ++- .../cmakeprojectmanager/servermodereader.h | 2 +- .../cmakeprojectmanager/tealeafreader.cpp | 3 ++- .../cmakeprojectmanager/tealeafreader.h | 3 ++- 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 2b440b22dd..2575f7bdc4 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -326,7 +326,28 @@ bool BuildDirManager::persistCMakeState() void BuildDirManager::generateProjectTree(CMakeProjectNode *root) { QTC_ASSERT(m_reader, return); - m_reader->generateProjectTree(root); + QTC_ASSERT(m_futureInterface, return); + + const Utils::FileName projectFile = m_buildConfiguration->target()->project()->projectFilePath(); + QList tmp = Utils::filtered(m_futureInterface->future().result(), + [projectFile](const FileNode *fn) -> bool { + const Utils::FileName &path = fn->filePath(); + return path != projectFile && !path.toString().startsWith(projectFile.toString() + ".user"); + }); + Utils::sort(tmp, ProjectExplorer::Node::sortByPath); + + m_futureInterface.reset(); // Make sure to flush the stale results + + const QList allFiles = tmp; + m_reader->generateProjectTree(root, allFiles); + QSet usedNodes; + foreach (FileNode *fn, root->recursiveFileNodes()) + usedNodes.insert(fn); + + QList leftOvers = Utils::filtered(allFiles, [&usedNodes](FileNode *fn) { + return !usedNodes.contains(fn); + }); + qDeleteAll(leftOvers); } QSet BuildDirManager::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) diff --git a/src/plugins/cmakeprojectmanager/builddirreader.h b/src/plugins/cmakeprojectmanager/builddirreader.h index 8d47d5d288..20b0de2fd0 100644 --- a/src/plugins/cmakeprojectmanager/builddirreader.h +++ b/src/plugins/cmakeprojectmanager/builddirreader.h @@ -99,7 +99,8 @@ public: virtual CMakeConfig parsedConfiguration() const = 0; virtual QList buildTargets() const = 0; - virtual void generateProjectTree(CMakeProjectNode *root) = 0; + virtual void generateProjectTree(CMakeProjectNode *root, + const QList &allFiles) = 0; virtual QSet updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) = 0; signals: diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index 416f691810..7fd974d64d 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -211,8 +211,9 @@ CMakeConfig ServerModeReader::parsedConfiguration() const return m_cmakeCache; } -void ServerModeReader::generateProjectTree(CMakeProjectNode *root) +void ServerModeReader::generateProjectTree(CMakeProjectNode *root, const QList &allFiles) { + Q_UNUSED(allFiles); QSet knownFiles; for (auto it = m_cmakeInputsFileNodes.constBegin(); it != m_cmakeInputsFileNodes.constEnd(); ++it) knownFiles.insert((*it)->filePath()); diff --git a/src/plugins/cmakeprojectmanager/servermodereader.h b/src/plugins/cmakeprojectmanager/servermodereader.h index 358893f81f..933542e71d 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.h +++ b/src/plugins/cmakeprojectmanager/servermodereader.h @@ -64,7 +64,7 @@ public: QList buildTargets() const final; CMakeConfig parsedConfiguration() const final; - void generateProjectTree(CMakeProjectNode *root) final; + void generateProjectTree(CMakeProjectNode *root, const QList &allFiles) final; QSet updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) final; private: diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index 671fd10b34..37d9b49176 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -318,8 +318,9 @@ CMakeConfig TeaLeafReader::parseConfiguration(const FileName &cacheFile, QString return result; } -void TeaLeafReader::generateProjectTree(CMakeProjectNode *root) +void TeaLeafReader::generateProjectTree(CMakeProjectNode *root, const QList &allFiles) { + Q_UNUSED(allFiles); root->setDisplayName(m_projectName); // Delete no longer necessary file watcher: diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.h b/src/plugins/cmakeprojectmanager/tealeafreader.h index e855716e60..beecfa6b76 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.h +++ b/src/plugins/cmakeprojectmanager/tealeafreader.h @@ -52,7 +52,8 @@ public: QList buildTargets() const final; CMakeConfig parsedConfiguration() const final; - void generateProjectTree(CMakeProjectNode *root) final; + void generateProjectTree(CMakeProjectNode *root, + const QList &allFiles) final; QSet updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) final; private: -- GitLab