From 7af9e0e827473e68560e7f26cdcfa08e031ecf67 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 14 Nov 2019 11:35:35 +0100 Subject: [PATCH] ProjectExplorer: Speed up finding subfolder nodes Instead of building up a temporary list and searching in there, search the children directly. Change-Id: Ibf08dad6dbbed3fbda3b93a7df311b9dd6f6e710 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/projectnodes.cpp | 19 ++++++++++--------- src/plugins/projectexplorer/projectnodes.h | 2 ++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 97a4bda4dcd..dd3783ebe02 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -54,14 +54,6 @@ namespace ProjectExplorer { -static FolderNode *folderNode(const FolderNode *folder, const Utils::FilePath &directory) -{ - return static_cast(Utils::findOrDefault(folder->folderNodes(), - [&directory](const FolderNode *fn) { - return fn && fn->filePath() == directory; - })); -} - static FolderNode *recursiveFindOrCreateFolderNode(FolderNode *folder, const Utils::FilePath &directory, const Utils::FilePath &overrideBaseDir, @@ -93,7 +85,7 @@ static FolderNode *recursiveFindOrCreateFolderNode(FolderNode *folder, foreach (const QString &part, parts) { path = path.pathAppended(part); // Find folder in subFolders - FolderNode *next = folderNode(parent, path); + FolderNode *next = parent->folderNode(path); if (!next) { // No FolderNode yet, so create it auto tmp = factory(path); @@ -626,6 +618,15 @@ QList FolderNode::folderNodes() const return result; } +FolderNode *FolderNode::folderNode(const Utils::FilePath &directory) const +{ + Node *node = Utils::findOrDefault(m_nodes, [directory](const std::unique_ptr &n) { + FolderNode *fn = n->asFolderNode(); + return fn && fn->filePath() == directory; + }); + return static_cast(node); +} + void FolderNode::addNestedNode(std::unique_ptr &&fileNode, const Utils::FilePath &overrideBaseDir, const FolderNodeFactory &factory) diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 7ad184cdf7c..02697324f6e 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -236,6 +236,8 @@ public: QList fileNodes() const; FileNode *fileNode(const Utils::FilePath &file) const; QList folderNodes() const; + FolderNode *folderNode(const Utils::FilePath &directory) const; + using FolderNodeFactory = std::function(const Utils::FilePath &)>; void addNestedNodes(std::vector> &&files, const Utils::FilePath &overrideBaseDir = Utils::FilePath(),