diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index fff06a0aec8..a4d2e705478 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -162,15 +162,15 @@ expected_str copyRecursively_fallback(const FilePath &src, const FilePath if (!targetPath.parentDir().ensureWritableDir()) { error = QString("Could not create directory %1") .arg(targetPath.parentDir().toUserOutput()); - return false; + return IterationPolicy::Stop; } const expected_str result = path.copyFile(targetPath); if (!result) { error = result.error(); - return false; + return IterationPolicy::Stop; } - return true; + return IterationPolicy::Continue; }, {{"*"}, QDir::NoDotAndDotDot | QDir::Files, QDirIterator::Subdirectories}); @@ -627,12 +627,12 @@ void DesktopDeviceFileAccess::iterateDirectory(const FilePath &filePath, QDirIterator it(filePath.path(), filter.nameFilters, filter.fileFilters, filter.iteratorFlags); while (it.hasNext()) { const FilePath path = FilePath::fromString(it.next()); - bool res = false; + IterationPolicy res; if (callBack.index() == 0) res = std::get<0>(callBack)(path); else res = std::get<1>(callBack)(path, path.filePathInfo()); - if (!res) + if (res == IterationPolicy::Stop) return; } } @@ -1074,7 +1074,7 @@ bool UnixDeviceFileAccess::iterateWithFind(const FilePath &filePath, if (entries.isEmpty()) return true; - const auto toFilePath = [&filePath, &callBack](const QString &entry) -> bool { + const auto toFilePath = [&filePath, &callBack](const QString &entry) { if (callBack.index() == 0) return std::get<0>(callBack)(filePath.withNewPath(entry)); @@ -1083,12 +1083,12 @@ bool UnixDeviceFileAccess::iterateWithFind(const FilePath &filePath, const FilePathInfo fi = FileUtils::filePathInfoFromTriple(infos); if (!fi.fileFlags) - return true; + return IterationPolicy::Continue; const FilePath fp = filePath.withNewPath(fileName); // Do not return the entry for the directory we are searching in. if (fp.path() == filePath.path()) - return true; + return IterationPolicy::Continue; return std::get<1>(callBack)(fp, fi); }; @@ -1098,7 +1098,7 @@ bool UnixDeviceFileAccess::iterateWithFind(const FilePath &filePath, entries.pop_front(); for (const QString &entry : entries) { - if (!toFilePath(entry)) + if (toFilePath(entry) == IterationPolicy::Stop) break; } @@ -1152,12 +1152,12 @@ static void iterateLsOutput(const FilePath &base, if (!nameMatches(entry)) continue; const FilePath current = base.pathAppended(entry); - bool res = false; + IterationPolicy res; if (callBack.index() == 0) res = std::get<0>(callBack)(current); else res = std::get<1>(callBack)(current, current.filePathInfo()); - if (!res) + if (res == IterationPolicy::Stop) break; } } diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index ea14cae1e74..65423265813 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -524,8 +524,10 @@ FilePaths FilePath::dirEntries(const FileFilter &filter, QDir::SortFlags sort) c { FilePaths result; - const auto callBack = [&result](const FilePath &path) { result.append(path); return true; }; - iterateDirectory(callBack, filter); + iterateDirectory( + [&result](const FilePath &path) { result.append(path); return IterationPolicy::Continue; }, + filter + ); // FIXME: Not all flags supported here. const QDir::SortFlags sortBy = (sort & QDir::SortByMask); diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index 36747f8994a..dfc4af4108a 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -51,6 +51,8 @@ public: using FilePaths = QList; +enum class IterationPolicy { Stop, Continue }; + class QTCREATOR_UTILS_EXPORT FilePath { public: @@ -161,8 +163,8 @@ public: using IterateDirCallback = std::variant< - std::function, - std::function + std::function, + std::function >; void iterateDirectory( diff --git a/src/libs/utils/fsengine/fsengine_impl.cpp b/src/libs/utils/fsengine/fsengine_impl.cpp index af255e1f929..b0b188b9387 100644 --- a/src/libs/utils/fsengine/fsengine_impl.cpp +++ b/src/libs/utils/fsengine/fsengine_impl.cpp @@ -205,7 +205,7 @@ QStringList FSEngineImpl::entryList(QDir::Filters filters, const QStringList &fi .cache(p, new FilePathInfoCache::CachedData{fi, QDateTime::currentDateTime().addSecs(60)}); - return true; + return IterationPolicy::Continue; }, {filterNames, filters}); return result; @@ -309,7 +309,7 @@ QAbstractFileEngine::Iterator *FSEngineImpl::beginEntryList(QDir::Filters filter = new FilePathInfoCache::CachedData{fi, QDateTime::currentDateTime().addSecs(60)}; g_filePathInfoCache.cache(p, data); - return true; + return IterationPolicy::Continue; }, {filterNames, filters}); diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 38a1b092319..611f7bba5c4 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -350,7 +350,7 @@ static QList availableNdkPlatformsLegacy(const FilePath &ndkLocation) filePath.toString() .mid(filePath.path().lastIndexOf('-') + 1) .toInt()); - return true; + return IterationPolicy::Continue; }, {{"android-*"}, QDir::Dirs}); diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index d131f0bca3a..75d6f175bf7 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -165,9 +165,9 @@ static FilePath debugServer(bool useLldb, const Target *target) const auto handleLldbServerCandidate = [&abiNeedle, &lldbServer] (const FilePath &path) { if (path.parentDir().fileName() == abiNeedle) { lldbServer = path; - return false; + return IterationPolicy::Stop; } - return true; + return IterationPolicy::Continue; }; prebuilt.iterateDirectory(handleLldbServerCandidate, {{"lldb-server"}, dirFilter, QDirIterator::Subdirectories}); diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index fb17484c5d5..b3792554168 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -733,7 +733,10 @@ void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers(const FilePaths &s paths = Utils::filteredUnique(paths); - const auto addSuspect = [&suspects](const FilePath &entry) { suspects.append(entry); return true; }; + const auto addSuspect = [&suspects](const FilePath &entry) { + suspects.append(entry); + return IterationPolicy::Continue; + }; for (const FilePath &path : paths) path.iterateDirectory(addSuspect, {filters, QDir::Files | QDir::Executable}); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e739e8b9d82..933e923d625 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1593,7 +1593,7 @@ QString GdbEngine::cleanupFullName(const QString &fileName) QString path = filePath.path(); m_baseNameToFullName.insert(name, path); } - return true; + return IterationPolicy::Continue; }, {{"*"}, QDir::NoFilter, QDirIterator::Subdirectories}); } diff --git a/src/plugins/docker/kitdetector.cpp b/src/plugins/docker/kitdetector.cpp index 98653dde2a0..0b9e05b5892 100644 --- a/src/plugins/docker/kitdetector.cpp +++ b/src/plugins/docker/kitdetector.cpp @@ -220,7 +220,6 @@ QtVersions KitDetectorPrivate::autoDetectQtVersions() const [qtVersion](QtVersion* other) { return qtVersion->mkspecPath() == other->mkspecPath(); })) { - qtVersions.append(qtVersion); QtVersionManager::addVersion(qtVersion); emit q->logOutput( @@ -228,7 +227,7 @@ QtVersions KitDetectorPrivate::autoDetectQtVersions() const } } } - return true; + return IterationPolicy::Continue; }; emit q->logOutput(ProjectExplorer::Tr::tr("Searching for qmake executables...")); diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index c2a625ccbdb..d2449bd69ae 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1120,7 +1120,7 @@ static FilePaths findCompilerCandidates(const ToolchainDetector &detector, compilerPaths << candidate; else if (regexp.match(candidate.path()).hasMatch()) compilerPaths << candidate; - return true; + return IterationPolicy::Continue; }; const FilePath globalDir = device->filePath(deviceDir.path()); globalDir.iterateDirectory(callBack, {nameFilters, QDir::Files | QDir::Executable}); diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 66396be0705..2338b08ba1e 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -86,7 +86,7 @@ static void findAllQrcFiles(const FilePath &filePath, FilePaths &out) filePath.iterateDirectory( [&out](const FilePath &path) { out.append(path.canonicalPath()); - return true; + return IterationPolicy::Continue; }, {{"*.qrc"}, QDir::Files}); } diff --git a/src/plugins/remotelinux/filesystemaccess_test.cpp b/src/plugins/remotelinux/filesystemaccess_test.cpp index b4fa54ce9be..fcc8477974a 100644 --- a/src/plugins/remotelinux/filesystemaccess_test.cpp +++ b/src/plugins/remotelinux/filesystemaccess_test.cpp @@ -148,9 +148,9 @@ void FileSystemAccessTest::testDirStatus() [&fileExists](const FilePath &filePath) { if (filePath.baseName() == "test") { fileExists = true; - return true; + return IterationPolicy::Continue; } - return false; + return IterationPolicy::Stop; }, {{"test"}, QDir::Files}); diff --git a/src/plugins/remotelinux/makeinstallstep.cpp b/src/plugins/remotelinux/makeinstallstep.cpp index 46a4cad599c..21c9cc2c906 100644 --- a/src/plugins/remotelinux/makeinstallstep.cpp +++ b/src/plugins/remotelinux/makeinstallstep.cpp @@ -209,7 +209,7 @@ void MakeInstallStep::finish(ProcessResult result) : DeployableFile::TypeNormal; const QString targetDir = filePath.parentDir().path().mid(startPos); m_deploymentData.addFile(filePath, targetDir, type); - return true; + return IterationPolicy::Continue; }; rootDir.iterateDirectory(handleFile, {{}, QDir::Files | QDir::Hidden, QDirIterator::Subdirectories});