summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-09-06 12:09:49 +0200
committerTobias Hunger <tobias.hunger@qt.io>2017-09-08 11:18:58 +0000
commit3bb3f4af56b538dbf70a907f2ca5d633f8379608 (patch)
tree33441290a0ae2af37ae58ec69005657b45ff24a9
parent315cede70f47c3be2f517e32daed34cc963a06f5 (diff)
downloadqt-creator-3bb3f4af56b538dbf70a907f2ca5d633f8379608.tar.gz
CMake: Filter out CMake input files that are already listed
Filter out CMake input files that are already listed elsewhere in the project tree. This is server-mode only. Change-Id: Ib62cd5b521a51180d12d76ec2868a99dbdecc272 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp
index 8d487f5c49..04c69af89f 100644
--- a/src/plugins/cmakeprojectmanager/servermodereader.cpp
+++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp
@@ -243,7 +243,7 @@ CMakeConfig ServerModeReader::takeParsedConfiguration()
}
static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, int priority,
- const QString &displayName, QList<FileNode *> &files)
+ const QString &displayName, const QList<FileNode *> &files)
{
if (files.isEmpty())
return;
@@ -258,6 +258,17 @@ static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, i
fn->compress();
}
+static QList<FileNode *> removeKnownNodes(const QSet<Utils::FileName> &knownFiles, const QList<FileNode *> &files)
+{
+ return Utils::filtered(files, [&knownFiles](const FileNode *n) {
+ if (knownFiles.contains(n->filePath())) {
+ delete n;
+ return false;
+ }
+ return true;
+ });
+}
+
static void addCMakeInputs(FolderNode *root,
const Utils::FileName &sourceDir,
const Utils::FileName &buildDir,
@@ -268,13 +279,19 @@ static void addCMakeInputs(FolderNode *root,
ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath());
root->addNode(cmakeVFolder);
- addCMakeVFolder(cmakeVFolder, sourceDir, 1000, QString(), sourceInputs);
+ QSet<Utils::FileName> knownFiles;
+ root->forEachGenericNode([&knownFiles](const Node *n) {
+ if (n->listInProject())
+ knownFiles.insert(n->filePath());
+ });
+
+ addCMakeVFolder(cmakeVFolder, sourceDir, 1000, QString(), removeKnownNodes(knownFiles, sourceInputs));
addCMakeVFolder(cmakeVFolder, buildDir, 100,
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Build Directory>"),
- buildInputs);
+ removeKnownNodes(knownFiles, buildInputs));
addCMakeVFolder(cmakeVFolder, Utils::FileName(), 10,
QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Other Locations>"),
- rootInputs);
+ removeKnownNodes(knownFiles, rootInputs));
}
void ServerModeReader::generateProjectTree(CMakeProjectNode *root,
@@ -305,15 +322,15 @@ void ServerModeReader::generateProjectTree(CMakeProjectNode *root,
if (topLevel)
root->setDisplayName(topLevel->name);
- if (!cmakeFilesSource.isEmpty() || !cmakeFilesBuild.isEmpty() || !cmakeFilesOther.isEmpty())
- addCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
- cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther);
-
QHash<Utils::FileName, ProjectNode *> cmakeListsNodes = addCMakeLists(root, cmakeLists);
QList<FileNode *> knownHeaders;
addProjects(cmakeListsNodes, m_projects, knownHeaders);
addHeaderNodes(root, knownHeaders, allFiles);
+
+ if (!cmakeFilesSource.isEmpty() || !cmakeFilesBuild.isEmpty() || !cmakeFilesOther.isEmpty())
+ addCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
+ cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther);
}
void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps)