summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cmakeprojectmanager/builddirmanager.cpp23
-rw-r--r--src/plugins/cmakeprojectmanager/builddirreader.h3
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.cpp3
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.h2
-rw-r--r--src/plugins/cmakeprojectmanager/tealeafreader.cpp3
-rw-r--r--src/plugins/cmakeprojectmanager/tealeafreader.h3
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: