From 51c96112680673775c5a5ef2adb95ae34ffc3b64 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 17 Jun 2024 16:47:47 +0200 Subject: [PATCH] ProjectNodesHelper: Some cleanup 1. Make internal scanForFiles() static. 2. Make it a non-template method. 3. Pass const QFuture & instead of non-const QPromise, since we use it here just for isCanceled() checking. 4. Simplify setting a concurrent call data by eliminating the intermediate lambda. Amends c5564559cc01821e97e10f7253933ac5ca7f24c6 Change-Id: I4b7e3be6e8428c913920e66f2c00800055e83fde Reviewed-by: David Schulz --- .../projectexplorer/projectnodeshelper.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/projectexplorer/projectnodeshelper.h b/src/plugins/projectexplorer/projectnodeshelper.h index 6809622af5b..24edc853165 100644 --- a/src/plugins/projectexplorer/projectnodeshelper.h +++ b/src/plugins/projectexplorer/projectnodeshelper.h @@ -26,9 +26,8 @@ struct DirectoryScanResult Utils::FilePaths subDirectories; }; -template -DirectoryScanResult scanForFiles( - QPromise &promise, +static DirectoryScanResult scanForFiles( + const QFuture &future, const Utils::FilePath &directory, const QDir::Filters &filter, const std::function factory, @@ -38,7 +37,7 @@ DirectoryScanResult scanForFiles( const Utils::FilePaths entries = directory.dirEntries(filter); for (const Utils::FilePath &entry : entries) { - if (promise.isCanceled()) + if (future.isCanceled()) return result; if (Utils::anyOf(versionControls, [entry](const Core::IVersionControl *vc) { @@ -52,7 +51,6 @@ DirectoryScanResult scanForFiles( else if (FileNode *node = factory(entry)) result.nodes.append(node); } - return result; } @@ -65,9 +63,11 @@ QList scanForFilesRecursively( const std::function factory, const QList &versionControls) { + const QFuture future(promise.future()); + QSet visited; const DirectoryScanResult result - = scanForFiles(promise, directory, filter, factory, versionControls); + = scanForFiles(future, directory, filter, factory, versionControls); QList fileNodes = result.nodes; const double progressIncrement = progressRange / static_cast( @@ -86,15 +86,12 @@ QList scanForFilesRecursively( while (!subDirectories.isEmpty()) { using namespace Tasking; - LoopList iterator(subDirectories); + const LoopList iterator(subDirectories); subDirectories.clear(); auto onSetup = [&, iterator](Utils::Async &task) { task.setConcurrentCallData( - [&filter, &factory, &promise, &versionControls, subdir = iterator->first]( - QPromise &p) { - p.addResult(scanForFiles(promise, subdir, filter, factory, versionControls)); - }); + scanForFiles, future, iterator->first, filter, factory, versionControls); }; auto onDone = [&, iterator](const Utils::Async &task) {