diff options
Diffstat (limited to 'src/plugins/cmakeprojectmanager/tealeafreader.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/tealeafreader.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index abdcd2a4ef8..8783b9e8848 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -166,7 +166,6 @@ void TeaLeafReader::resetData() m_projectName.clear(); m_buildTargets.clear(); - qDeleteAll(m_files); m_files.clear(); } @@ -265,7 +264,7 @@ CMakeConfig TeaLeafReader::takeParsedConfiguration() void TeaLeafReader::generateProjectTree(CMakeProjectNode *root, const QList<const FileNode *> &allFiles) { - if (m_files.isEmpty()) + if (m_files.size() == 0) return; root->setDisplayName(m_projectName); @@ -312,18 +311,20 @@ void TeaLeafReader::generateProjectTree(CMakeProjectNode *root, const QList<cons }); // filter duplicates: - auto alreadySeen = QSet<FileName>::fromList(Utils::transform(m_files, &FileNode::filePath)); + auto alreadySeen = Utils::transform<QSet>(m_files, &FileNode::filePath); const QList<const FileNode *> unseenMissingHeaders = Utils::filtered(missingHeaders, [&alreadySeen](const FileNode *fn) { const int count = alreadySeen.count(); alreadySeen.insert(fn->filePath()); return (alreadySeen.count() != count); }); - const QList<FileNode *> fileNodes = m_files - + Utils::transform(unseenMissingHeaders, [](const FileNode *fn) { return fn->clone(); }); + root->addNestedNodes(std::move(m_files), m_parameters.sourceDirectory); - root->addNestedNodes(fileNodes, m_parameters.sourceDirectory); - m_files.clear(); // Some of the FileNodes in files() were deleted! + std::vector<std::unique_ptr<FileNode>> fileNodes + = transform<std::vector>(unseenMissingHeaders, [](const FileNode *fn) { + return std::unique_ptr<FileNode>(fn->clone()); + }); + root->addNestedNodes(std::move(fileNodes), m_parameters.sourceDirectory); } static void processCMakeIncludes(const CMakeBuildTarget &cbt, const ToolChain *tc, @@ -417,7 +418,7 @@ void TeaLeafReader::extractData() resetData(); m_projectName = m_parameters.projectName; - m_files.append(new FileNode(topCMake, FileType::Project, false)); + m_files.emplace_back(std::make_unique<FileNode>(topCMake, FileType::Project, false)); // Do not insert topCMake into m_cmakeFiles: The project already watches that! // Find cbp file @@ -440,16 +441,20 @@ void TeaLeafReader::extractData() m_projectName = cbpparser.projectName(); - m_files = cbpparser.fileList(); + m_files = cbpparser.takeFileList(); if (cbpparser.hasCMakeFiles()) { - m_files.append(cbpparser.cmakeFileList()); - foreach (const FileNode *node, cbpparser.cmakeFileList()) + std::vector<std::unique_ptr<FileNode>> cmakeNodes = cbpparser.takeCmakeFileList(); + for (const std::unique_ptr<FileNode> &node : cmakeNodes) m_cmakeFiles.insert(node->filePath()); + + std::move(std::begin(cmakeNodes), std::end(cmakeNodes), std::back_inserter(m_files)); } // Make sure the top cmakelists.txt file is always listed: - if (!contains(m_files, [topCMake](FileNode *fn) { return fn->filePath() == topCMake; })) - m_files.append(new FileNode(topCMake, FileType::Project, false)); + if (!contains(m_files, [topCMake](const std::unique_ptr<FileNode> &fn) { + return fn->filePath() == topCMake; + })) + m_files.emplace_back(std::make_unique<FileNode>(topCMake, FileType::Project, false)); Utils::sort(m_files, &Node::sortByPath); |