aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/tealeafreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cmakeprojectmanager/tealeafreader.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/tealeafreader.cpp31
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);