forked from qt-creator/qt-creator
ProjectNodesHelper: Some cleanup
1. Make internal scanForFiles() static.
2. Make it a non-template method.
3. Pass const QFuture<void> & instead of non-const QPromise<Result>,
since we use it here just for isCanceled() checking.
4. Simplify setting a concurrent call data by eliminating the
intermediate lambda.
Amends c5564559cc
Change-Id: I4b7e3be6e8428c913920e66f2c00800055e83fde
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -26,9 +26,8 @@ struct DirectoryScanResult
|
|||||||
Utils::FilePaths subDirectories;
|
Utils::FilePaths subDirectories;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Result>
|
static DirectoryScanResult scanForFiles(
|
||||||
DirectoryScanResult scanForFiles(
|
const QFuture<void> &future,
|
||||||
QPromise<Result> &promise,
|
|
||||||
const Utils::FilePath &directory,
|
const Utils::FilePath &directory,
|
||||||
const QDir::Filters &filter,
|
const QDir::Filters &filter,
|
||||||
const std::function<FileNode *(const Utils::FilePath &)> factory,
|
const std::function<FileNode *(const Utils::FilePath &)> factory,
|
||||||
@@ -38,7 +37,7 @@ DirectoryScanResult scanForFiles(
|
|||||||
|
|
||||||
const Utils::FilePaths entries = directory.dirEntries(filter);
|
const Utils::FilePaths entries = directory.dirEntries(filter);
|
||||||
for (const Utils::FilePath &entry : entries) {
|
for (const Utils::FilePath &entry : entries) {
|
||||||
if (promise.isCanceled())
|
if (future.isCanceled())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
if (Utils::anyOf(versionControls, [entry](const Core::IVersionControl *vc) {
|
if (Utils::anyOf(versionControls, [entry](const Core::IVersionControl *vc) {
|
||||||
@@ -52,7 +51,6 @@ DirectoryScanResult scanForFiles(
|
|||||||
else if (FileNode *node = factory(entry))
|
else if (FileNode *node = factory(entry))
|
||||||
result.nodes.append(node);
|
result.nodes.append(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +63,11 @@ QList<FileNode *> scanForFilesRecursively(
|
|||||||
const std::function<FileNode *(const Utils::FilePath &)> factory,
|
const std::function<FileNode *(const Utils::FilePath &)> factory,
|
||||||
const QList<Core::IVersionControl *> &versionControls)
|
const QList<Core::IVersionControl *> &versionControls)
|
||||||
{
|
{
|
||||||
|
const QFuture<void> future(promise.future());
|
||||||
|
|
||||||
QSet<Utils::FilePath> visited;
|
QSet<Utils::FilePath> visited;
|
||||||
const DirectoryScanResult result
|
const DirectoryScanResult result
|
||||||
= scanForFiles(promise, directory, filter, factory, versionControls);
|
= scanForFiles(future, directory, filter, factory, versionControls);
|
||||||
QList<FileNode *> fileNodes = result.nodes;
|
QList<FileNode *> fileNodes = result.nodes;
|
||||||
const double progressIncrement = progressRange
|
const double progressIncrement = progressRange
|
||||||
/ static_cast<double>(
|
/ static_cast<double>(
|
||||||
@@ -86,15 +86,12 @@ QList<FileNode *> scanForFilesRecursively(
|
|||||||
|
|
||||||
while (!subDirectories.isEmpty()) {
|
while (!subDirectories.isEmpty()) {
|
||||||
using namespace Tasking;
|
using namespace Tasking;
|
||||||
LoopList iterator(subDirectories);
|
const LoopList iterator(subDirectories);
|
||||||
subDirectories.clear();
|
subDirectories.clear();
|
||||||
|
|
||||||
auto onSetup = [&, iterator](Utils::Async<DirectoryScanResult> &task) {
|
auto onSetup = [&, iterator](Utils::Async<DirectoryScanResult> &task) {
|
||||||
task.setConcurrentCallData(
|
task.setConcurrentCallData(
|
||||||
[&filter, &factory, &promise, &versionControls, subdir = iterator->first](
|
scanForFiles, future, iterator->first, filter, factory, versionControls);
|
||||||
QPromise<DirectoryScanResult> &p) {
|
|
||||||
p.addResult(scanForFiles(promise, subdir, filter, factory, versionControls));
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
auto onDone = [&, iterator](const Utils::Async<DirectoryScanResult> &task) {
|
auto onDone = [&, iterator](const Utils::Async<DirectoryScanResult> &task) {
|
||||||
|
Reference in New Issue
Block a user