From 6886b59fe60c27998f43f9efa2557414cb2d2de2 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 12 May 2017 14:39:55 +0200 Subject: [PATCH] CMake: Filter duplicate files from tree in tealeaf mode Task-number: QTCREATORBUG-17955 Change-Id: Ibd19c7a0d398f3f26d63983ec024722933485513 Reviewed-by: Tim Jenssen --- src/plugins/cmakeprojectmanager/tealeafreader.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index f4769fe0ceb..0bfcac1d68e 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -309,7 +309,16 @@ void TeaLeafReader::generateProjectTree(CMakeProjectNode *root, const QListfilePath().isChildOf(inc); }); }); - QList fileNodes = m_files + Utils::transform(missingHeaders, [](const FileNode *fn) { return fn->clone(); }); + // filter duplicates: + auto alreadySeen = QSet::fromList(Utils::transform(m_files, &FileNode::filePath)); + const QList unseenMissingHeaders = Utils::filtered(missingHeaders, [&alreadySeen](const FileNode *fn) { + const int count = alreadySeen.count(); + alreadySeen.insert(fn->filePath()); + return (alreadySeen.count() != count); + }); + + const QList fileNodes = m_files + + Utils::transform(unseenMissingHeaders, [](const FileNode *fn) { return fn->clone(); }); root->addNestedNodes(fileNodes, m_parameters.sourceDirectory); m_files.clear(); // Some of the FileNodes in files() were deleted!