diff options
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<FileNode *> 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<FileNode *> allFiles = tmp; + m_reader->generateProjectTree(root, allFiles); + QSet<FileNode *> usedNodes; + foreach (FileNode *fn, root->recursiveFileNodes()) + usedNodes.insert(fn); + + QList<FileNode *> leftOvers = Utils::filtered(allFiles, [&usedNodes](FileNode *fn) { + return !usedNodes.contains(fn); + }); + qDeleteAll(leftOvers); } QSet<Core::Id> 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<CMakeBuildTarget> buildTargets() const = 0; - virtual void generateProjectTree(CMakeProjectNode *root) = 0; + virtual void generateProjectTree(CMakeProjectNode *root, + const QList<ProjectExplorer::FileNode *> &allFiles) = 0; virtual QSet<Core::Id> 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<FileNode *> &allFiles) { + Q_UNUSED(allFiles); QSet<Utils::FileName> 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<CMakeBuildTarget> buildTargets() const final; CMakeConfig parsedConfiguration() const final; - void generateProjectTree(CMakeProjectNode *root) final; + void generateProjectTree(CMakeProjectNode *root, const QList<ProjectExplorer::FileNode *> &allFiles) final; QSet<Core::Id> 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<FileNode *> &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<CMakeBuildTarget> buildTargets() const final; CMakeConfig parsedConfiguration() const final; - void generateProjectTree(CMakeProjectNode *root) final; + void generateProjectTree(CMakeProjectNode *root, + const QList<ProjectExplorer::FileNode *> &allFiles) final; QSet<Core::Id> updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder) final; private: |