summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2022-01-21 12:22:54 +0100
committerhjk <hjk@qt.io>2022-01-26 13:13:41 +0000
commit1fc83d2a568dea3233212b351d6e9ffbc05c75e9 (patch)
treedb9cc36793eef961237f18ea1567baa7732be592 /src
parentc6fdb66b2bd5c1dd30220fb0e87d2fc2e0dc2615 (diff)
downloadqt-creator-1fc83d2a568dea3233212b351d6e9ffbc05c75e9.tar.gz
Utils: Wrap various file system iteration flags and filters
... into a single class. This makes passing them around as a whole easier, and opens a path to have "generic" filters in form of a lambda or such. Change-Id: Ibf644b2fedcf0f1a35258030710afff8f5873f88 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/buildablehelperlibrary.cpp4
-rw-r--r--src/libs/utils/filepath.cpp28
-rw-r--r--src/libs/utils/filepath.h20
-rw-r--r--src/libs/utils/fileutils.h4
-rw-r--r--src/libs/utils/settingsaccessor.cpp2
-rw-r--r--src/plugins/android/androidconfigurations.cpp3
-rw-r--r--src/plugins/android/androidmanager.cpp2
-rw-r--r--src/plugins/android/androidmanifesteditoriconwidget.cpp2
-rw-r--r--src/plugins/android/androidsdkdownloader.cpp4
-rw-r--r--src/plugins/android/javalanguageserver.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/fileapiparser.cpp5
-rw-r--r--src/plugins/debugger/debuggeritemmanager.cpp2
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp4
-rw-r--r--src/plugins/docker/dockerdevice.cpp49
-rw-r--r--src/plugins/docker/dockerdevice.h7
-rw-r--r--src/plugins/git/gerrit/gerritparameters.cpp2
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp14
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp6
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.h7
-rw-r--r--src/plugins/projectexplorer/gcctoolchain.cpp3
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp11
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
-rw-r--r--src/plugins/projectexplorer/session.cpp3
-rw-r--r--src/plugins/qmldesigner/generatecmakelists.cpp6
-rw-r--r--src/plugins/qnx/qnxconfiguration.cpp5
-rw-r--r--src/plugins/qnx/qnxutils.cpp4
-rw-r--r--src/plugins/remotelinux/filesystemaccess_test.cpp3
-rw-r--r--src/plugins/remotelinux/linuxdevice.cpp29
-rw-r--r--src/plugins/remotelinux/linuxdevice.h4
-rw-r--r--src/plugins/texteditor/highlightersettings.cpp6
-rw-r--r--src/plugins/texteditor/snippets/snippetscollection.cpp3
35 files changed, 123 insertions, 145 deletions
diff --git a/src/libs/utils/buildablehelperlibrary.cpp b/src/libs/utils/buildablehelperlibrary.cpp
index a4ab89fe89..f5f5f5d39a 100644
--- a/src/libs/utils/buildablehelperlibrary.cpp
+++ b/src/libs/utils/buildablehelperlibrary.cpp
@@ -88,9 +88,7 @@ static FilePath findQmakeInDir(const FilePath &dir)
// Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order.
const FilePaths candidates = dir.dirEntries(
- BuildableHelperLibrary::possibleQMakeCommands(),
- QDir::Files,
- QDirIterator::NoIteratorFlags,
+ {BuildableHelperLibrary::possibleQMakeCommands(), QDir::Files},
QDir::Name | QDir::Reversed);
for (const FilePath &candidate : candidates) {
if (candidate == qmakePath)
diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp
index 2b665d0c84..bcf713687a 100644
--- a/src/libs/utils/filepath.cpp
+++ b/src/libs/utils/filepath.cpp
@@ -718,19 +718,16 @@ bool FilePath::createDir() const
return dir.mkpath(dir.absolutePath());
}
-FilePaths FilePath::dirEntries(const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags,
- QDir::SortFlags sort) const
+FilePaths FilePath::dirEntries(const FileFilter &filter, QDir::SortFlags sort) const
{
FilePaths result;
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.iterateDirectory, return {});
const auto callBack = [&result](const FilePath &path) { result.append(path); return true; };
- s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
+ s_deviceHooks.iterateDirectory(*this, callBack, filter);
} else {
- QDirIterator dit(m_data, nameFilters, filters, flags);
+ QDirIterator dit(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
while (dit.hasNext())
result.append(FilePath::fromString(dit.next()));
}
@@ -748,7 +745,7 @@ FilePaths FilePath::dirEntries(const QStringList &nameFilters,
FilePaths FilePath::dirEntries(QDir::Filters filters) const
{
- return dirEntries({}, filters);
+ return dirEntries(FileFilter({}, filters));
}
// This runs \a callBack on each directory entry matching all \a filters and
@@ -756,17 +753,15 @@ FilePaths FilePath::dirEntries(QDir::Filters filters) const
// An empty \nameFilters list matches every name.
void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const FileFilter &filter) const
{
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.iterateDirectory, return);
- s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags);
+ s_deviceHooks.iterateDirectory(*this, callBack, filter);
return;
}
- QDirIterator it(m_data, nameFilters, filters, flags);
+ QDirIterator it(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags);
while (it.hasNext()) {
if (!callBack(FilePath::fromString(it.next())))
return;
@@ -1454,6 +1449,15 @@ QTextStream &operator<<(QTextStream &s, const FilePath &fn)
return s << fn.toString();
}
+FileFilter::FileFilter(const QStringList &nameFilters,
+ const QDir::Filters fileFilters,
+ const QDirIterator::IteratorFlags flags)
+ : nameFilters(nameFilters),
+ fileFilters(fileFilters),
+ iteratorFlags(flags)
+{
+}
+
} // namespace Utils
std::hash<Utils::FilePath>::result_type
diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h
index 2cb2ad9d92..501feff17b 100644
--- a/src/libs/utils/filepath.h
+++ b/src/libs/utils/filepath.h
@@ -51,6 +51,18 @@ namespace Utils {
class Environment;
class EnvironmentChange;
+class QTCREATOR_UTILS_EXPORT FileFilter
+{
+public:
+ FileFilter(const QStringList &nameFilters,
+ const QDir::Filters fileFilters = QDir::NoFilter,
+ const QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags);
+
+ const QStringList nameFilters;
+ const QDir::Filters fileFilters = QDir::NoFilter;
+ const QDirIterator::IteratorFlags iteratorFlags = QDirIterator::NoIteratorFlags;
+};
+
class QTCREATOR_UTILS_EXPORT FilePath
{
public:
@@ -121,9 +133,7 @@ public:
qint64 fileSize() const;
qint64 bytesAvailable() const;
bool createDir() const;
- QList<FilePath> dirEntries(const QStringList &nameFilters,
- QDir::Filters filters = QDir::NoFilter,
- QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags,
+ QList<FilePath> dirEntries(const FileFilter &filter,
QDir::SortFlags sort = QDir::NoSort) const;
QList<FilePath> dirEntries(QDir::Filters filters) const;
QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const;
@@ -160,9 +170,7 @@ public:
[[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const;
[[nodiscard]] FilePath withNewPath(const QString &newPath) const;
void iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters = QDir::NoFilter,
- QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const;
+ const FileFilter &filter) const;
// makes sure that capitalization of directories is canonical
// on Windows and macOS. This is rarely needed.
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index af56d2fb49..163e762e51 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -82,9 +82,7 @@ public:
std::function<QString(const FilePath &)> mapToDevicePath;
std::function<void(const FilePath &,
const std::function<bool(const FilePath &)> &, // Abort on 'false' return.
- const QStringList &,
- QDir::Filters,
- QDirIterator::IteratorFlags)> iterateDirectory;
+ const FileFilter &)> iterateDirectory;
std::function<QByteArray(const FilePath &, qint64, qint64)> fileContents;
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
std::function<QDateTime(const FilePath &)> lastModified;
diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp
index 43bb69402a..7c847446f9 100644
--- a/src/libs/utils/settingsaccessor.cpp
+++ b/src/libs/utils/settingsaccessor.cpp
@@ -221,7 +221,7 @@ FilePaths BackUpStrategy::readFileCandidates(const FilePath &baseFileName) const
const QStringList filter(baseFileName.fileName() + '*');
const FilePath baseFileDir = baseFileName.parentDir();
- return baseFileDir.dirEntries(filter, QDir::Files | QDir::Hidden | QDir::System);
+ return baseFileDir.dirEntries({filter, QDir::Files | QDir::Hidden | QDir::System});
}
int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index bf86c19ed8..ca8e29eb38 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -382,8 +382,7 @@ QVector<int> AndroidConfig::availableNdkPlatforms(const QtVersion *qtVersion) co
.toInt());
return true;
},
- {"android-*"},
- QDir::Dirs);
+ {{"android-*"}, QDir::Dirs});
Utils::sort(availableNdkPlatforms, std::greater<>());
return availableNdkPlatforms;
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index a256bf43c7..5a4d2c2fe5 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -423,7 +423,7 @@ QString AndroidManager::apkDevicePreferredAbi(const Target *target)
QStringList apkAbis;
const FilePaths libsPaths = libsPath.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
for (const FilePath &abiDir : libsPaths) {
- if (!abiDir.dirEntries(QStringList("*.so"), QDir::Files | QDir::NoDotAndDotDot).isEmpty())
+ if (!abiDir.dirEntries({{"*.so"}, QDir::Files | QDir::NoDotAndDotDot}).isEmpty())
apkAbis << abiDir.fileName();
}
return preferredAbi(apkAbis, target);
diff --git a/src/plugins/android/androidmanifesteditoriconwidget.cpp b/src/plugins/android/androidmanifesteditoriconwidget.cpp
index 1202c8ebc1..742c1fd631 100644
--- a/src/plugins/android/androidmanifesteditoriconwidget.cpp
+++ b/src/plugins/android/androidmanifesteditoriconwidget.cpp
@@ -256,7 +256,7 @@ static QImage scaleWithoutStretching(const QImage& original, const QSize& target
static bool similarFilesExist(const FilePath &path)
{
- const FilePaths entries = path.parentDir().dirEntries({path.completeBaseName() + ".*"}, {});
+ const FilePaths entries = path.parentDir().dirEntries({{path.completeBaseName() + ".*"}});
return !entries.empty();
}
diff --git a/src/plugins/android/androidsdkdownloader.cpp b/src/plugins/android/androidsdkdownloader.cpp
index 59adbe50bd..28837ca8d4 100644
--- a/src/plugins/android/androidsdkdownloader.cpp
+++ b/src/plugins/android/androidsdkdownloader.cpp
@@ -73,9 +73,7 @@ static void setSdkFilesExecPermission( const FilePath &sdkExtractPath)
}
return true;
},
- {"*"},
- QDir::Files,
- QDirIterator::Subdirectories);
+ {{"*"}, QDir::Files, QDirIterator::Subdirectories});
}
void AndroidSdkDownloader::downloadAndExtractSdk(const FilePath &jdkPath, const FilePath &sdkExtractPath)
diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp
index 390a7296bf..4c06b296eb 100644
--- a/src/plugins/android/javalanguageserver.cpp
+++ b/src/plugins/android/javalanguageserver.cpp
@@ -322,7 +322,7 @@ void JLSClient::updateProjectFiles()
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
.arg(targetSDK);
FilePaths libs = {androidJar};
- libs << packageSourceDir.pathAppended("libs").dirEntries({"*.jar"}, QDir::Files);
+ libs << packageSourceDir.pathAppended("libs").dirEntries({{"*.jar"}, QDir::Files});
generateProjectFile(projectDir, qtSrc, project()->displayName());
generateClassPathFile(projectDir, sourceDir, libs);
}
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
index bb00d0b05d..add008f756 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
@@ -79,7 +79,7 @@ static QStringList scanDirectory(const FilePath &path, const QString &prefix)
QStringList result;
qCDebug(cmInputLog) << "Scanning for directories matching" << prefix << "in" << path;
- foreach (const FilePath &entry, path.dirEntries({prefix + "*"}, QDir::Dirs | QDir::NoDotAndDotDot)) {
+ foreach (const FilePath &entry, path.dirEntries({{prefix + "*"}, QDir::Dirs | QDir::NoDotAndDotDot})) {
QTC_ASSERT(entry.isDir(), continue);
result.append(entry.toString());
}
diff --git a/src/plugins/cmakeprojectmanager/fileapiparser.cpp b/src/plugins/cmakeprojectmanager/fileapiparser.cpp
index 863aec0c14..3e0f1474a5 100644
--- a/src/plugins/cmakeprojectmanager/fileapiparser.cpp
+++ b/src/plugins/cmakeprojectmanager/fileapiparser.cpp
@@ -948,10 +948,7 @@ FilePath FileApiParser::scanForCMakeReplyFile(const FilePath &buildDirectory)
if (!replyDir.exists())
return {};
- const FilePaths entries = replyDir.dirEntries({"index-*.json"},
- QDir::Files,
- QDirIterator::NoIteratorFlags,
- QDir::Name);
+ const FilePaths entries = replyDir.dirEntries({{"index-*.json"}, QDir::Files}, QDir::Name);
return entries.isEmpty() ? FilePath() : entries.first();
}
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp
index 1b1e198d56..fbe0aeb3fa 100644
--- a/src/plugins/debugger/debuggeritemmanager.cpp
+++ b/src/plugins/debugger/debuggeritemmanager.cpp
@@ -780,7 +780,7 @@ void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers(const FilePaths &s
const auto addSuspect = [&suspects](const FilePath &entry) { suspects.append(entry); return true; };
for (const FilePath &path : paths)
- path.iterateDirectory(addSuspect, filters, QDir::Files | QDir::Executable);
+ path.iterateDirectory(addSuspect, {filters, QDir::Files | QDir::Executable});
QStringList logMessages{tr("Searching debuggers...")};
for (const FilePath &command : qAsConst(suspects)) {
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 6aa84a6835..811f8d42e4 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1615,9 +1615,7 @@ QString GdbEngine::cleanupFullName(const QString &fileName)
}
return true;
},
- {"*"},
- QDir::NoFilter,
- QDirIterator::Subdirectories);
+ {{"*"}, QDir::NoFilter, QDirIterator::Subdirectories});
}
}
diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp
index 7cc8eaea07..26cbaf73e3 100644
--- a/src/plugins/docker/dockerdevice.cpp
+++ b/src/plugins/docker/dockerdevice.cpp
@@ -1455,17 +1455,20 @@ bool DockerDevice::setPermissions(const FilePath &filePath, QFileDevice::Permiss
void DockerDevice::iterateWithFind(const FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters) const
+ const FileFilter &filter) const
{
QTC_ASSERT(callBack, return);
QTC_CHECK(filePath.isAbsolutePath());
- QStringList arguments{filePath.path(), "-maxdepth", "1"};
+ QStringList arguments{filePath.path()};
+
+ const QDir::Filters filters = filter.fileFilters;
if (filters & QDir::NoSymLinks)
arguments.prepend("-H");
else
arguments.prepend("-L");
+ if (!filter.iteratorFlags.testFlag(QDirIterator::Subdirectories))
+ arguments.append({"-maxdepth", "1"});
QStringList filterOptions;
if (filters & QDir::Dirs)
@@ -1493,12 +1496,12 @@ void DockerDevice::iterateWithFind(const FilePath &filePath,
const QString nameOption = (filters & QDir::CaseSensitive) ? QString{"-name"}
: QString{"-iname"};
QStringList criticalWildcards;
- if (!nameFilters.isEmpty()) {
+ if (!filter.nameFilters.isEmpty()) {
const QRegularExpression oneChar("\\[.*?\\]");
- for (int i = 0, len = nameFilters.size(); i < len; ++i) {
+ for (int i = 0, len = filter.nameFilters.size(); i < len; ++i) {
if (i > 0)
filterOptions << "-o";
- QString current = nameFilters.at(i);
+ QString current = filter.nameFilters.at(i);
if (current.indexOf(oneChar) != -1)
criticalWildcards.append(current);
current.replace(oneChar, "?"); // BAD! but still better than nothing
@@ -1537,15 +1540,17 @@ void DockerDevice::iterateWithFind(const FilePath &filePath,
static void filterEntriesHelper(const FilePath &base,
const std::function<bool(const FilePath &)> &callBack,
const QStringList &entries,
- const QStringList &nameFilters,
- QDir::Filters filters)
-{
- const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
- QRegularExpression re;
- re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
- QTC_CHECK(re.isValid());
- return re;
- });
+ const FileFilter &filter)
+{
+ QTC_CHECK(filter.iteratorFlags != QDirIterator::NoIteratorFlags); // FIXME: Not supported yet below.
+
+ const QList<QRegularExpression> nameRegexps =
+ transform(filter.nameFilters, [](const QString &filter) {
+ QRegularExpression re;
+ re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
+ QTC_CHECK(re.isValid());
+ return re;
+ });
const auto nameMatches = [&nameRegexps](const QString &fileName) {
for (const QRegularExpression &re : nameRegexps) {
@@ -1557,7 +1562,7 @@ static void filterEntriesHelper(const FilePath &base,
};
// FIXME: Handle filters. For now bark on unsupported options.
- QTC_CHECK(filters == QDir::NoFilter);
+ QTC_CHECK(filter.fileFilters == QDir::NoFilter);
for (const QString &entry : entries) {
if (!nameMatches(entry))
@@ -1569,12 +1574,8 @@ static void filterEntriesHelper(const FilePath &base,
void DockerDevice::iterateDirectory(const FilePath &filePath,
const std::function<bool(const FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const FileFilter &filter) const
{
- Q_UNUSED(flags) // FIXME: Use it.
-
QTC_ASSERT(handlesFile(filePath), return);
updateContainerAccess();
if (hasLocalFileAccess()) {
@@ -1582,12 +1583,12 @@ void DockerDevice::iterateDirectory(const FilePath &filePath,
local.iterateDirectory([&callBack, this](const FilePath &entry) {
return callBack(mapFromLocalAccess(entry));
},
- nameFilters, filters);
+ filter);
return;
}
if (d->m_useFind) {
- iterateWithFind(filePath, callBack, nameFilters, filters);
+ iterateWithFind(filePath, callBack, filter);
// d->m_useFind will be set to false if 'find' is not found. In this
// case fall back to 'ls' below.
if (d->m_useFind)
@@ -1597,7 +1598,7 @@ void DockerDevice::iterateDirectory(const FilePath &filePath,
// if we do not have find - use ls as fallback
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
- filterEntriesHelper(filePath, callBack, entries, nameFilters, filters);
+ filterEntriesHelper(filePath, callBack, entries, filter);
}
QByteArray DockerDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h
index 310dd9e0d9..914fbabcb0 100644
--- a/src/plugins/docker/dockerdevice.h
+++ b/src/plugins/docker/dockerdevice.h
@@ -96,9 +96,7 @@ public:
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
void iterateDirectory(const Utils::FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const override;
+ const Utils::FileFilter &filter) const override;
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
QDateTime lastModified(const Utils::FilePath &filePath) const override;
@@ -127,8 +125,7 @@ protected:
private:
void iterateWithFind(const Utils::FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters) const;
+ const Utils::FileFilter &filter) const;
void aboutToBeRemoved() const final;
diff --git a/src/plugins/git/gerrit/gerritparameters.cpp b/src/plugins/git/gerrit/gerritparameters.cpp
index 133fdaf02e..75b76158c1 100644
--- a/src/plugins/git/gerrit/gerritparameters.cpp
+++ b/src/plugins/git/gerrit/gerritparameters.cpp
@@ -70,7 +70,7 @@ static FilePath detectApp(const QString &defaultExe)
if (!gitBinDir.endsWith("/usr/bin"))
return {};
path = gitBinDir.parentDir().parentDir();
- const FilePaths entries = path.dirEntries({"mingw*"}, {});
+ const FilePaths entries = path.dirEntries({{"mingw*"}});
if (entries.isEmpty())
return {};
path = entries.first() / "bin" / defaultApp;
diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp
index d23147ee83..44ad3c2356 100644
--- a/src/plugins/mcusupport/mcusupportsdk.cpp
+++ b/src/plugins/mcusupport/mcusupportsdk.cpp
@@ -217,8 +217,7 @@ static McuPackage *createRGLPackage()
if (rglPath.exists()) {
defaultPath = rglPath;
const FilePaths subDirs =
- defaultPath.dirEntries({QLatin1String("rgl_ghs_D1Mx_*")},
- QDir::Dirs | QDir::NoDotAndDotDot);
+ defaultPath.dirEntries({{"rgl_ghs_D1Mx_*"}, QDir::Dirs | QDir::NoDotAndDotDot});
if (subDirs.count() == 1)
defaultPath = subDirs.first();
}
@@ -272,8 +271,7 @@ static McuPackage *createMcuXpressoIdePackage()
defaultPath = programPath;
// If default dir has exactly one sub dir that could be the IDE path, pre-select that.
const FilePaths subDirs =
- defaultPath.dirEntries({QLatin1String("MCUXpressoIDE*")},
- QDir::Dirs | QDir::NoDotAndDotDot);
+ defaultPath.dirEntries({{"MCUXpressoIDE*"}, QDir::Dirs | QDir::NoDotAndDotDot});
if (subDirs.count() == 1)
defaultPath = subDirs.first();
}
@@ -304,8 +302,8 @@ static McuPackage *createCypressProgrammerPackage()
const FilePath candidate = findInProgramFiles("Cypress");
if (candidate.exists()) {
// "Cypress Auto Flash Utility 1.0"
- const auto subDirs = candidate.dirEntries({"Cypress Auto Flash Utility*"},
- QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
+ const auto subDirs = candidate.dirEntries({{"Cypress Auto Flash Utility*"}, QDir::Dirs},
+ QDir::Unsorted);
if (!subDirs.empty())
defaultPath = subDirs.first();
}
@@ -331,8 +329,8 @@ static McuPackage *createRenesasProgrammerPackage()
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
if (candidate.exists()) {
// "Renesas Flash Programmer V3.09"
- const auto subDirs = candidate.dirEntries({"Renesas Flash Programmer*"},
- QDir::Dirs, QDirIterator::NoIteratorFlags, QDir::Unsorted);
+ const auto subDirs = candidate.dirEntries({{"Renesas Flash Programmer*"}, QDir::Dirs},
+ QDir::Unsorted);
if (!subDirs.empty())
defaultPath = subDirs.first();
}
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
index 3a5c209dda..33969239f7 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
@@ -177,13 +177,11 @@ bool DesktopDevice::handlesFile(const FilePath &filePath) const
}
void DesktopDevice::iterateDirectory(const FilePath &filePath,
- const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const std::function<bool(const FilePath &)> &callBack,
+ const FileFilter &filter) const
{
QTC_CHECK(!filePath.needsDevice());
- filePath.iterateDirectory(callBack, nameFilters, filters, flags);
+ filePath.iterateDirectory(callBack, filter);
}
qint64 DesktopDevice::fileSize(const FilePath &filePath) const
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.h b/src/plugins/projectexplorer/devicesupport/desktopdevice.h
index 4523be31bd..06502c559d 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.h
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.h
@@ -75,9 +75,7 @@ public:
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
void iterateDirectory(const Utils::FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const override;
+ const Utils::FileFilter &filter) const override;
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
qint64 fileSize(const Utils::FilePath &filePath) const override;
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
index 8eb992a88b..32c6add09c 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
@@ -524,12 +524,10 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
deviceHooks.iterateDirectory = [](const FilePath &filePath,
const std::function<bool(const FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) {
+ const FileFilter &filter) {
auto device = DeviceManager::deviceForPath(filePath);
QTC_ASSERT(device, return);
- device->iterateDirectory(filePath, callBack, nameFilters, filters, flags);
+ device->iterateDirectory(filePath, callBack, filter);
};
deviceHooks.fileContents = [](const FilePath &filePath, qint64 maxSize, qint64 offset) {
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp
index b183e38edf..f9c91dea1a 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp
@@ -363,15 +363,11 @@ FilePath IDevice::symLinkTarget(const FilePath &filePath) const
void IDevice::iterateDirectory(const FilePath &filePath,
const std::function<bool(const FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const FileFilter &filter) const
{
Q_UNUSED(filePath);
Q_UNUSED(callBack);
- Q_UNUSED(nameFilters);
- Q_UNUSED(filters);
- Q_UNUSED(flags);
+ Q_UNUSED(filter);
QTC_CHECK(false);
}
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h
index 75491f94fc..7b7f1e572e 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.h
+++ b/src/plugins/projectexplorer/devicesupport/idevice.h
@@ -33,7 +33,6 @@
#include <QAbstractSocket>
#include <QCoreApplication>
-#include <QDir>
#include <QList>
#include <QObject>
#include <QSharedPointer>
@@ -257,13 +256,11 @@ public:
virtual bool renameFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const;
virtual Utils::FilePath searchExecutableInPath(const QString &fileName) const;
virtual Utils::FilePath searchExecutable(const QString &fileName,
- const QList<Utils::FilePath> &dirs) const;
+ const Utils::FilePaths &dirs) const;
virtual Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const;
virtual void iterateDirectory(const Utils::FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags) const;
+ const Utils::FileFilter &filter) const;
virtual QByteArray fileContents(const Utils::FilePath &filePath,
qint64 limit,
qint64 offset) const;
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index b0b9809683..5a83af5401 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -1126,7 +1126,8 @@ static FilePaths findCompilerCandidates(const IDevice::ConstPtr &device,
return true;
};
const FilePath globalDir = device->mapToGlobalPath(deviceDir);
- device->iterateDirectory(globalDir, callBack, nameFilters, QDir::Files | QDir::Executable);
+ device->iterateDirectory(globalDir, callBack,
+ {nameFilters, QDir::Files | QDir::Executable});
}
} else {
// The normal, local host case.
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
index 6f182cc1e4..705e51aa66 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
@@ -423,10 +423,11 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
continue;
}
- const QDir::Filters filters = QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot;
+ const FileFilter filter {
+ {}, QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot, QDirIterator::NoIteratorFlags
+ };
const QDir::SortFlags sortflags = QDir::Name|QDir::IgnoreCase;
- const QDirIterator::IteratorFlag iteratorFlags = QDirIterator::NoIteratorFlags;
- FilePaths dirs = path.dirEntries({}, filters, iteratorFlags, sortflags);
+ FilePaths dirs = path.dirEntries(filter, sortflags);
while (!dirs.isEmpty()) {
const FilePath currentDir = dirs.takeFirst();
@@ -483,7 +484,7 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
result << factory;
} else {
- FilePaths subDirs = currentDir.dirEntries({}, filters, iteratorFlags, sortflags);
+ FilePaths subDirs = currentDir.dirEntries(filter, sortflags);
if (!subDirs.isEmpty()) {
// There is no QList::prepend(QList)...
dirs.swap(subDirs);
@@ -579,7 +580,7 @@ static QString qmlProjectName(const FilePath &folder)
{
FilePath currentFolder = folder;
while (!currentFolder.isEmpty()) {
- const QList<FilePath> fileList = currentFolder.dirEntries({"*.qmlproject"});
+ const FilePaths fileList = currentFolder.dirEntries({{"*.qmlproject"}});
if (!fileList.isEmpty())
return fileList.first().baseName();
currentFolder = currentFolder.parentDir();
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 9efd7f2858..f869a9d3cd 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -694,7 +694,7 @@ static ProjectExplorerPluginPrivate *dd = nullptr;
static FilePaths projectFilesInDirectory(const FilePath &path)
{
- return path.dirEntries(ProjectExplorerPlugin::projectFileGlobs(), QDir::Files);
+ return path.dirEntries({ProjectExplorerPlugin::projectFileGlobs(), QDir::Files});
}
static FilePaths projectsInDirectory(const FilePath &filePath)
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index c62d879675..bd48cc84da 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -791,8 +791,7 @@ QStringList SessionManager::sessions()
{
if (d->m_sessions.isEmpty()) {
// We are not initialized yet, so do that now
- const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({"*.qws"},
- QDir::NoFilter, QDirIterator::NoIteratorFlags, QDir::Time);
+ const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({{"*qws"}}, QDir::Time);
for (const FilePath &file : sessionFiles) {
const QString &name = file.completeBaseName();
d->m_sessionDateTimes.insert(name, file.lastModified());
diff --git a/src/plugins/qmldesigner/generatecmakelists.cpp b/src/plugins/qmldesigner/generatecmakelists.cpp
index 7609a31c15..c11f20436c 100644
--- a/src/plugins/qmldesigner/generatecmakelists.cpp
+++ b/src/plugins/qmldesigner/generatecmakelists.cpp
@@ -354,7 +354,7 @@ void generateModuleCmake(const FilePath &dir, const QString &uri)
QString fileTemplate = GenerateCmake::readTemplate(MODULEFILE_TEMPLATE_PATH);
QString singletonContent;
- FilePaths qmldirFileList = dir.dirEntries(QStringList(FILENAME_QMLDIR), FILES_ONLY);
+ FilePaths qmldirFileList = dir.dirEntries({QStringList(FILENAME_QMLDIR), FILES_ONLY});
if (!qmldirFileList.isEmpty()) {
QStringList singletons = getSingletonsFromQmldirFile(qmldirFileList.first());
for (QString &singleton : singletons) {
@@ -418,7 +418,7 @@ FilePaths getDirectoryQmls(const FilePath &dir)
{
const QStringList qmlFilesOnly("*.qml");
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
- FilePaths allFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY);
+ FilePaths allFiles = dir.dirEntries({qmlFilesOnly, FILES_ONLY});
FilePaths moduleFiles;
for (FilePath &file : allFiles) {
if (!isFileBlacklisted(file.fileName()) &&
@@ -436,7 +436,7 @@ QStringList getDirectoryTreeQmls(const FilePath &dir)
ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
QStringList qmlFileList;
- FilePaths thisDirFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY);
+ FilePaths thisDirFiles = dir.dirEntries({qmlFilesOnly, FILES_ONLY});
for (FilePath &file : thisDirFiles) {
if (!isFileBlacklisted(file.fileName()) &&
project->isKnownFile(file)) {
diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp
index 9e5fbd25ec..751bab3401 100644
--- a/src/plugins/qnx/qnxconfiguration.cpp
+++ b/src/plugins/qnx/qnxconfiguration.cpp
@@ -444,9 +444,8 @@ void QnxConfiguration::updateTargets()
void QnxConfiguration::assignDebuggersToTargets()
{
const FilePath hostUsrBinDir = m_qnxHost.pathAppended("usr/bin");
- FilePaths debuggerNames = hostUsrBinDir.dirEntries(
- QStringList(HostOsInfo::withExecutableSuffix("nto*-gdb")),
- QDir::Files);
+ const FilePaths debuggerNames = hostUsrBinDir.dirEntries(
+ {{HostOsInfo::withExecutableSuffix("nto*-gdb")}, QDir::Files});
Environment sysEnv = Environment::systemEnvironment();
sysEnv.modify(qnxEnvironmentItems());
for (const FilePath &debuggerPath : debuggerNames) {
diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp
index e8fabfb959..90e3aeb851 100644
--- a/src/plugins/qnx/qnxutils.cpp
+++ b/src/plugins/qnx/qnxutils.cpp
@@ -144,9 +144,9 @@ FilePath QnxUtils::envFilePath(const FilePath &sdpPath)
{
FilePaths entries;
if (sdpPath.osType() == OsTypeWindows)
- entries = sdpPath.dirEntries({"*-env.bat"});
+ entries = sdpPath.dirEntries({{"*-env.bat"}});
else
- entries = sdpPath.dirEntries({"*-env.sh"});
+ entries = sdpPath.dirEntries({{"*-env.sh"}});
if (!entries.isEmpty())
return entries.first();
diff --git a/src/plugins/remotelinux/filesystemaccess_test.cpp b/src/plugins/remotelinux/filesystemaccess_test.cpp
index 5d45484a7d..603cd1b878 100644
--- a/src/plugins/remotelinux/filesystemaccess_test.cpp
+++ b/src/plugins/remotelinux/filesystemaccess_test.cpp
@@ -114,8 +114,7 @@ void FileSystemAccessTest::testDirStatuses()
}
return false;
},
- {"test"},
- QDir::Files);
+ {{"test"}, QDir::Files});
QVERIFY(fileExists);
QVERIFY(testFilePath.removeFile());
diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp
index 91c58bff1e..5422d8d913 100644
--- a/src/plugins/remotelinux/linuxdevice.cpp
+++ b/src/plugins/remotelinux/linuxdevice.cpp
@@ -679,16 +679,15 @@ bool LinuxDevice::setPermissions(const Utils::FilePath &filePath, QFileDevice::P
static void filterEntriesHelper(const FilePath &base,
const std::function<bool(const FilePath &)> &callBack,
const QStringList &entries,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags)
-{
- const QList<QRegularExpression> nameRegexps = transform(nameFilters, [](const QString &filter) {
- QRegularExpression re;
- re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
- QTC_CHECK(re.isValid());
- return re;
- });
+ const FileFilter &filter)
+{
+ const QList<QRegularExpression> nameRegexps =
+ transform(filter.nameFilters, [](const QString &filter) {
+ QRegularExpression re;
+ re.setPattern(QRegularExpression::wildcardToRegularExpression(filter));
+ QTC_CHECK(re.isValid());
+ return re;
+ });
const auto nameMatches = [&nameRegexps](const QString &fileName) {
for (const QRegularExpression &re : nameRegexps) {
@@ -700,8 +699,8 @@ static void filterEntriesHelper(const FilePath &base,
};
// FIXME: Handle filters. For now bark on unsupported options.
- QTC_CHECK(filters == QDir::NoFilter);
- QTC_CHECK(flags == QDirIterator::NoIteratorFlags);
+ QTC_CHECK(filter.fileFilters == QDir::NoFilter);
+ QTC_CHECK(filter.iteratorFlags == QDirIterator::NoIteratorFlags);
for (const QString &entry : entries) {
if (!nameMatches(entry))
@@ -713,15 +712,13 @@ static void filterEntriesHelper(const FilePath &base,
void LinuxDevice::iterateDirectory(const FilePath &filePath,
const std::function<bool(const FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const
+ const FileFilter &filter) const
{
QTC_ASSERT(handlesFile(filePath), return);
// if we do not have find - use ls as fallback
const QString output = d->outputForRunInShell({"ls", {"-1", "-b", "--", filePath.path()}});
const QStringList entries = output.split('\n', Qt::SkipEmptyParts);
- filterEntriesHelper(filePath, callBack, entries, nameFilters, filters, flags);
+ filterEntriesHelper(filePath, callBack, entries, filter);
}
QByteArray LinuxDevice::fileContents(const FilePath &filePath, qint64 limit, qint64 offset) const
diff --git a/src/plugins/remotelinux/linuxdevice.h b/src/plugins/remotelinux/linuxdevice.h
index 189b0229ec..fa68624cac 100644
--- a/src/plugins/remotelinux/linuxdevice.h
+++ b/src/plugins/remotelinux/linuxdevice.h
@@ -78,9 +78,7 @@ public:
Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override;
void iterateDirectory(const Utils::FilePath &filePath,
const std::function<bool(const Utils::FilePath &)> &callBack,
- const QStringList &nameFilters,
- QDir::Filters filters,
- QDirIterator::IteratorFlags flags) const override;
+ const Utils::FileFilter &filter) const override;
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
QDateTime lastModified(const Utils::FilePath &filePath) const override;
diff --git a/src/plugins/texteditor/highlightersettings.cpp b/src/plugins/texteditor/highlightersettings.cpp
index f94a5c09e1..75875249b7 100644
--- a/src/plugins/texteditor/highlightersettings.cpp
+++ b/src/plugins/texteditor/highlightersettings.cpp
@@ -58,7 +58,7 @@ FilePath findFallbackDefinitionsLocation()
FilePath("/opt") / kateSyntaxPath
};
for (const FilePath &path : paths) {
- if (path.exists() && !path.dirEntries({"*.xml"}).isEmpty())
+ if (path.exists() && !path.dirEntries({{"*.xml"}}).isEmpty())
return path;
}
}
@@ -76,7 +76,7 @@ FilePath findFallbackDefinitionsLocation()
const FilePath dir = FilePath::fromString(output);
for (auto &kateSyntaxPath : kateSyntaxPaths) {
const FilePath path = dir / kateSyntaxPath;
- if (path.exists() && !path.dirEntries({"*.xml"}).isEmpty())
+ if (path.exists() && !path.dirEntries({{"*.xml"}}).isEmpty())
return path;
}
}
@@ -84,7 +84,7 @@ FilePath findFallbackDefinitionsLocation()
}
const FilePath dir = Core::ICore::resourcePath("generic-highlighter");
- if (dir.exists() && !dir.dirEntries({"*.xml"}).isEmpty())
+ if (dir.exists() && !dir.dirEntries({{"*.xml"}}).isEmpty())
return dir;
return {};
diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp
index e678a93ef2..49ededc1b0 100644
--- a/src/plugins/texteditor/snippets/snippetscollection.cpp
+++ b/src/plugins/texteditor/snippets/snippetscollection.cpp
@@ -95,7 +95,8 @@ SnippetsCollection *SnippetsCollection::instance()
// SnippetsCollection
SnippetsCollection::SnippetsCollection()
: m_userSnippetsFile(Core::ICore::userResourcePath("snippets/snippets.xml")),
- m_builtInSnippetsFiles(Core::ICore::resourcePath("snippets").dirEntries({"*.xml"}))
+ m_builtInSnippetsFiles(Core::ICore::resourcePath("snippets")
+ .dirEntries(FileFilter({"*.xml"})))
{
connect(Core::ICore::instance(), &Core::ICore::coreOpened,