diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-06 12:09:49 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-08 11:18:58 +0000 |
commit | 3bb3f4af56b538dbf70a907f2ca5d633f8379608 (patch) | |
tree | 33441290a0ae2af37ae58ec69005657b45ff24a9 | |
parent | 315cede70f47c3be2f517e32daed34cc963a06f5 (diff) | |
download | qt-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.cpp | 33 |
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) |