forked from qt-creator/qt-creator
Core: Use more of Utils::FilePath in locator filters
Change-Id: Ie550691861317f2af6f38170b5dfc6413af5954f Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -34,7 +34,6 @@
|
|||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
using namespace Core;
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
@@ -47,13 +46,11 @@ public:
|
|||||||
{
|
{
|
||||||
iterator.clear();
|
iterator.clear();
|
||||||
previousResultPaths.clear();
|
previousResultPaths.clear();
|
||||||
previousResultNames.clear();
|
|
||||||
previousEntry.clear();
|
previousEntry.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSharedPointer<BaseFileFilter::Iterator> iterator;
|
QSharedPointer<BaseFileFilter::Iterator> iterator;
|
||||||
QStringList previousResultPaths;
|
FilePathList previousResultPaths;
|
||||||
QStringList previousResultNames;
|
|
||||||
bool forceNewSearchList;
|
bool forceNewSearchList;
|
||||||
QString previousEntry;
|
QString previousEntry;
|
||||||
};
|
};
|
||||||
@@ -66,7 +63,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
} // Core
|
|
||||||
|
|
||||||
BaseFileFilter::Iterator::~Iterator() = default;
|
BaseFileFilter::Iterator::~Iterator() = default;
|
||||||
|
|
||||||
@@ -74,7 +70,7 @@ BaseFileFilter::BaseFileFilter()
|
|||||||
: d(new Internal::BaseFileFilterPrivate)
|
: d(new Internal::BaseFileFilterPrivate)
|
||||||
{
|
{
|
||||||
d->m_data.forceNewSearchList = true;
|
d->m_data.forceNewSearchList = true;
|
||||||
setFileIterator(new ListIterator(QStringList()));
|
setFileIterator(new ListIterator({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseFileFilter::~BaseFileFilter()
|
BaseFileFilter::~BaseFileFilter()
|
||||||
@@ -87,7 +83,6 @@ void BaseFileFilter::prepareSearch(const QString &entry)
|
|||||||
Q_UNUSED(entry)
|
Q_UNUSED(entry)
|
||||||
d->m_current.iterator = d->m_data.iterator;
|
d->m_current.iterator = d->m_data.iterator;
|
||||||
d->m_current.previousResultPaths = d->m_data.previousResultPaths;
|
d->m_current.previousResultPaths = d->m_data.previousResultPaths;
|
||||||
d->m_current.previousResultNames = d->m_data.previousResultNames;
|
|
||||||
d->m_current.forceNewSearchList = d->m_data.forceNewSearchList;
|
d->m_current.forceNewSearchList = d->m_data.forceNewSearchList;
|
||||||
d->m_current.previousEntry = d->m_data.previousEntry;
|
d->m_current.previousEntry = d->m_data.previousEntry;
|
||||||
d->m_data.forceNewSearchList = false;
|
d->m_data.forceNewSearchList = false;
|
||||||
@@ -132,12 +127,10 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
|
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
|
||||||
&& !pathSeparatorAdded;
|
&& !pathSeparatorAdded;
|
||||||
if (searchInPreviousResults)
|
if (searchInPreviousResults)
|
||||||
d->m_current.iterator.reset(new ListIterator(d->m_current.previousResultPaths,
|
d->m_current.iterator.reset(new ListIterator(d->m_current.previousResultPaths));
|
||||||
d->m_current.previousResultNames));
|
|
||||||
|
|
||||||
QTC_ASSERT(d->m_current.iterator.data(), return QList<LocatorFilterEntry>());
|
QTC_ASSERT(d->m_current.iterator.data(), return QList<LocatorFilterEntry>());
|
||||||
d->m_current.previousResultPaths.clear();
|
d->m_current.previousResultPaths.clear();
|
||||||
d->m_current.previousResultNames.clear();
|
|
||||||
d->m_current.previousEntry = fp.filePath;
|
d->m_current.previousEntry = fp.filePath;
|
||||||
d->m_current.iterator->toFront();
|
d->m_current.iterator->toFront();
|
||||||
bool canceled = false;
|
bool canceled = false;
|
||||||
@@ -148,15 +141,14 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
}
|
}
|
||||||
|
|
||||||
d->m_current.iterator->next();
|
d->m_current.iterator->next();
|
||||||
QString path = d->m_current.iterator->filePath();
|
FilePath path = d->m_current.iterator->filePath();
|
||||||
QString name = d->m_current.iterator->fileName();
|
QString matchText = hasPathSeparator ? path.toString() : path.fileName();
|
||||||
QString matchText = hasPathSeparator ? path : name;
|
|
||||||
QRegularExpressionMatch match = regexp.match(matchText);
|
QRegularExpressionMatch match = regexp.match(matchText);
|
||||||
|
|
||||||
if (match.hasMatch()) {
|
if (match.hasMatch()) {
|
||||||
QFileInfo fi(path);
|
QFileInfo fi(path.toString());
|
||||||
LocatorFilterEntry filterEntry(this, fi.fileName(), QString(path + fp.postfix));
|
LocatorFilterEntry filterEntry(this, fi.fileName(), QString(path.toString() + fp.postfix));
|
||||||
filterEntry.fileName = path;
|
filterEntry.fileName = path.toString();
|
||||||
filterEntry.extraInfo = FilePath::fromFileInfo(fi).shortNativePath();
|
filterEntry.extraInfo = FilePath::fromFileInfo(fi).shortNativePath();
|
||||||
|
|
||||||
const int matchLevel = matchLevelFor(match, matchText);
|
const int matchLevel = matchLevelFor(match, matchText);
|
||||||
@@ -170,7 +162,6 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
|
|
||||||
entries[matchLevel].append(filterEntry);
|
entries[matchLevel].append(filterEntry);
|
||||||
d->m_current.previousResultPaths.append(path);
|
d->m_current.previousResultPaths.append(path);
|
||||||
d->m_current.previousResultNames.append(name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,32 +216,18 @@ void BaseFileFilter::updatePreviousResultData()
|
|||||||
return; // do not update with the new result list etc
|
return; // do not update with the new result list etc
|
||||||
d->m_data.previousEntry = d->m_current.previousEntry;
|
d->m_data.previousEntry = d->m_current.previousEntry;
|
||||||
d->m_data.previousResultPaths = d->m_current.previousResultPaths;
|
d->m_data.previousResultPaths = d->m_current.previousResultPaths;
|
||||||
d->m_data.previousResultNames = d->m_current.previousResultNames;
|
|
||||||
// forceNewSearchList was already reset in prepareSearch
|
// forceNewSearchList was already reset in prepareSearch
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseFileFilter::ListIterator::ListIterator(const QStringList &filePaths)
|
BaseFileFilter::ListIterator::ListIterator(const FilePathList &filePaths)
|
||||||
{
|
{
|
||||||
m_filePaths = filePaths;
|
m_filePaths = filePaths;
|
||||||
for (const QString &path : filePaths) {
|
|
||||||
QFileInfo fi(path);
|
|
||||||
m_fileNames.append(fi.fileName());
|
|
||||||
}
|
|
||||||
toFront();
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseFileFilter::ListIterator::ListIterator(const QStringList &filePaths,
|
|
||||||
const QStringList &fileNames)
|
|
||||||
{
|
|
||||||
m_filePaths = filePaths;
|
|
||||||
m_fileNames = fileNames;
|
|
||||||
toFront();
|
toFront();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseFileFilter::ListIterator::toFront()
|
void BaseFileFilter::ListIterator::toFront()
|
||||||
{
|
{
|
||||||
m_pathPosition = m_filePaths.constBegin() - 1;
|
m_pathPosition = m_filePaths.constBegin() - 1;
|
||||||
m_namePosition = m_fileNames.constBegin() - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BaseFileFilter::ListIterator::hasNext() const
|
bool BaseFileFilter::ListIterator::hasNext() const
|
||||||
@@ -259,25 +236,18 @@ bool BaseFileFilter::ListIterator::hasNext() const
|
|||||||
return m_pathPosition + 1 != m_filePaths.constEnd();
|
return m_pathPosition + 1 != m_filePaths.constEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseFileFilter::ListIterator::next()
|
FilePath BaseFileFilter::ListIterator::next()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return QString());
|
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return {});
|
||||||
QTC_ASSERT(m_namePosition != m_fileNames.constEnd(), return QString());
|
|
||||||
++m_pathPosition;
|
++m_pathPosition;
|
||||||
++m_namePosition;
|
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return {});
|
||||||
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return QString());
|
|
||||||
QTC_ASSERT(m_namePosition != m_fileNames.constEnd(), return QString());
|
|
||||||
return *m_pathPosition;
|
return *m_pathPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseFileFilter::ListIterator::filePath() const
|
FilePath BaseFileFilter::ListIterator::filePath() const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return QString());
|
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return {});
|
||||||
return *m_pathPosition;
|
return *m_pathPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseFileFilter::ListIterator::fileName() const
|
} // Core
|
||||||
{
|
|
||||||
QTC_ASSERT(m_namePosition != m_fileNames.constEnd(), return QString());
|
|
||||||
return *m_namePosition;
|
|
||||||
}
|
|
||||||
|
@@ -27,8 +27,9 @@
|
|||||||
|
|
||||||
#include "ilocatorfilter.h"
|
#include "ilocatorfilter.h"
|
||||||
|
|
||||||
|
#include <utils/fileutils.h>
|
||||||
|
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <QStringList>
|
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
@@ -44,27 +45,22 @@ public:
|
|||||||
virtual ~Iterator();
|
virtual ~Iterator();
|
||||||
virtual void toFront() = 0;
|
virtual void toFront() = 0;
|
||||||
virtual bool hasNext() const = 0;
|
virtual bool hasNext() const = 0;
|
||||||
virtual QString next() = 0;
|
virtual Utils::FilePath next() = 0;
|
||||||
virtual QString filePath() const = 0;
|
virtual Utils::FilePath filePath() const = 0;
|
||||||
virtual QString fileName() const = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CORE_EXPORT ListIterator : public Iterator {
|
class CORE_EXPORT ListIterator : public Iterator {
|
||||||
public:
|
public:
|
||||||
ListIterator(const QStringList &filePaths);
|
ListIterator(const Utils::FilePathList &filePaths);
|
||||||
ListIterator(const QStringList &filePaths, const QStringList &fileNames);
|
|
||||||
|
|
||||||
void toFront() override;
|
void toFront() override;
|
||||||
bool hasNext() const override;
|
bool hasNext() const override;
|
||||||
QString next() override;
|
Utils::FilePath next() override;
|
||||||
QString filePath() const override;
|
Utils::FilePath filePath() const override;
|
||||||
QString fileName() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList m_filePaths;
|
Utils::FilePathList m_filePaths;
|
||||||
QStringList m_fileNames;
|
Utils::FilePathList::const_iterator m_pathPosition;
|
||||||
QStringList::const_iterator m_pathPosition;
|
|
||||||
QStringList::const_iterator m_namePosition;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
BaseFileFilter();
|
BaseFileFilter();
|
||||||
|
@@ -56,7 +56,7 @@ QByteArray DirectoryFilter::saveState() const
|
|||||||
out << m_filters;
|
out << m_filters;
|
||||||
out << shortcutString();
|
out << shortcutString();
|
||||||
out << isIncludedByDefault();
|
out << isIncludedByDefault();
|
||||||
out << m_files;
|
out << Utils::transform(m_files, &Utils::FilePath::toString);
|
||||||
out << m_exclusionFilters;
|
out << m_exclusionFilters;
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -69,6 +69,7 @@ void DirectoryFilter::restoreState(const QByteArray &state)
|
|||||||
QStringList directories;
|
QStringList directories;
|
||||||
QString shortcut;
|
QString shortcut;
|
||||||
bool defaultFilter;
|
bool defaultFilter;
|
||||||
|
QStringList files;
|
||||||
|
|
||||||
QDataStream in(state);
|
QDataStream in(state);
|
||||||
in >> name;
|
in >> name;
|
||||||
@@ -76,7 +77,8 @@ void DirectoryFilter::restoreState(const QByteArray &state)
|
|||||||
in >> m_filters;
|
in >> m_filters;
|
||||||
in >> shortcut;
|
in >> shortcut;
|
||||||
in >> defaultFilter;
|
in >> defaultFilter;
|
||||||
in >> m_files;
|
in >> files;
|
||||||
|
m_files = Utils::transform(files, &Utils::FilePath::fromString);
|
||||||
if (!in.atEnd()) // Qt Creator 4.3 and later
|
if (!in.atEnd()) // Qt Creator 4.3 and later
|
||||||
in >> m_exclusionFilters;
|
in >> m_exclusionFilters;
|
||||||
else
|
else
|
||||||
@@ -231,12 +233,12 @@ void DirectoryFilter::refresh(QFutureInterface<void> &future)
|
|||||||
}
|
}
|
||||||
Utils::SubDirFileIterator subDirIterator(directories, m_filters, m_exclusionFilters);
|
Utils::SubDirFileIterator subDirIterator(directories, m_filters, m_exclusionFilters);
|
||||||
future.setProgressRange(0, subDirIterator.maxProgress());
|
future.setProgressRange(0, subDirIterator.maxProgress());
|
||||||
QStringList filesFound;
|
Utils::FilePathList filesFound;
|
||||||
auto end = subDirIterator.end();
|
auto end = subDirIterator.end();
|
||||||
for (auto it = subDirIterator.begin(); it != end; ++it) {
|
for (auto it = subDirIterator.begin(); it != end; ++it) {
|
||||||
if (future.isCanceled())
|
if (future.isCanceled())
|
||||||
break;
|
break;
|
||||||
filesFound << (*it).filePath;
|
filesFound << Utils::FilePath::fromString((*it).filePath);
|
||||||
if (future.isProgressUpdateNeeded()
|
if (future.isProgressUpdateNeeded()
|
||||||
|| future.progressValue() == 0 /*workaround for regression in Qt*/) {
|
|| future.progressValue() == 0 /*workaround for regression in Qt*/) {
|
||||||
future.setProgressValueAndText(subDirIterator.currentProgress(),
|
future.setProgressValueAndText(subDirIterator.currentProgress(),
|
||||||
|
@@ -77,7 +77,7 @@ private:
|
|||||||
QDialog *m_dialog = nullptr;
|
QDialog *m_dialog = nullptr;
|
||||||
Internal::Ui::DirectoryFilterOptions *m_ui = nullptr;
|
Internal::Ui::DirectoryFilterOptions *m_ui = nullptr;
|
||||||
mutable QMutex m_lock;
|
mutable QMutex m_lock;
|
||||||
QStringList m_files;
|
Utils::FilePathList m_files;
|
||||||
bool m_isCustomFilter = true;
|
bool m_isCustomFilter = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@ QTC_DECLARE_MYTESTDATADIR("../../../../tests/locators/")
|
|||||||
class MyBaseFileFilter : public Core::BaseFileFilter
|
class MyBaseFileFilter : public Core::BaseFileFilter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MyBaseFileFilter(const QStringList &theFiles)
|
MyBaseFileFilter(const Utils::FilePathList &theFiles)
|
||||||
{
|
{
|
||||||
setFileIterator(new BaseFileFilter::ListIterator(theFiles));
|
setFileIterator(new BaseFileFilter::ListIterator(theFiles));
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ void Core::Internal::CorePlugin::test_basefilefilter()
|
|||||||
QFETCH(QStringList, testFiles);
|
QFETCH(QStringList, testFiles);
|
||||||
QFETCH(QList<ReferenceData>, referenceDataList);
|
QFETCH(QList<ReferenceData>, referenceDataList);
|
||||||
|
|
||||||
MyBaseFileFilter filter(testFiles);
|
MyBaseFileFilter filter(Utils::transform(testFiles, &Utils::FilePath::fromString));
|
||||||
BasicLocatorFilterTest test(&filter);
|
BasicLocatorFilterTest test(&filter);
|
||||||
|
|
||||||
for (const ReferenceData &reference : qAsConst(referenceDataList)) {
|
for (const ReferenceData &reference : qAsConst(referenceDataList)) {
|
||||||
|
@@ -37,9 +37,9 @@
|
|||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
using namespace Core;
|
using namespace Core;
|
||||||
using namespace CppTools;
|
|
||||||
using namespace CppTools::Internal;
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
|
using namespace Utils;
|
||||||
|
|
||||||
namespace CppTools {
|
namespace CppTools {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -50,9 +50,8 @@ public:
|
|||||||
|
|
||||||
void toFront() override;
|
void toFront() override;
|
||||||
bool hasNext() const override;
|
bool hasNext() const override;
|
||||||
QString next() override;
|
Utils::FilePath next() override;
|
||||||
QString filePath() const override;
|
Utils::FilePath filePath() const override;
|
||||||
QString fileName() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void fetchMore();
|
void fetchMore();
|
||||||
@@ -62,13 +61,9 @@ private:
|
|||||||
QSet<QString> m_queuedPaths;
|
QSet<QString> m_queuedPaths;
|
||||||
QSet<QString> m_allResultPaths;
|
QSet<QString> m_allResultPaths;
|
||||||
QStringList m_resultQueue;
|
QStringList m_resultQueue;
|
||||||
QString m_currentPath;
|
FilePath m_currentPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
|
||||||
} // CppTools
|
|
||||||
|
|
||||||
|
|
||||||
CppIncludesIterator::CppIncludesIterator(CPlusPlus::Snapshot snapshot,
|
CppIncludesIterator::CppIncludesIterator(CPlusPlus::Snapshot snapshot,
|
||||||
const QSet<QString> &seedPaths)
|
const QSet<QString> &seedPaths)
|
||||||
: m_snapshot(snapshot),
|
: m_snapshot(snapshot),
|
||||||
@@ -90,26 +85,21 @@ bool CppIncludesIterator::hasNext() const
|
|||||||
return !m_resultQueue.isEmpty();
|
return !m_resultQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CppIncludesIterator::next()
|
FilePath CppIncludesIterator::next()
|
||||||
{
|
{
|
||||||
if (m_resultQueue.isEmpty())
|
if (m_resultQueue.isEmpty())
|
||||||
return QString();
|
return {};
|
||||||
m_currentPath = m_resultQueue.takeFirst();
|
m_currentPath = FilePath::fromString(m_resultQueue.takeFirst());
|
||||||
if (m_resultQueue.isEmpty())
|
if (m_resultQueue.isEmpty())
|
||||||
fetchMore();
|
fetchMore();
|
||||||
return m_currentPath;
|
return m_currentPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CppIncludesIterator::filePath() const
|
FilePath CppIncludesIterator::filePath() const
|
||||||
{
|
{
|
||||||
return m_currentPath;
|
return m_currentPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CppIncludesIterator::fileName() const
|
|
||||||
{
|
|
||||||
return QFileInfo(m_currentPath).fileName();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CppIncludesIterator::fetchMore()
|
void CppIncludesIterator::fetchMore()
|
||||||
{
|
{
|
||||||
while (!m_queuedPaths.isEmpty() && m_resultQueue.isEmpty()) {
|
while (!m_queuedPaths.isEmpty() && m_resultQueue.isEmpty()) {
|
||||||
@@ -186,3 +176,7 @@ void CppIncludesFilter::markOutdated()
|
|||||||
m_needsUpdate = true;
|
m_needsUpdate = true;
|
||||||
setFileIterator(nullptr); // clean up
|
setFileIterator(nullptr); // clean up
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // Internal
|
||||||
|
} // CppTools
|
||||||
|
|
||||||
|
@@ -57,9 +57,9 @@ void AllProjectsFilter::prepareSearch(const QString &entry)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(entry)
|
Q_UNUSED(entry)
|
||||||
if (!fileIterator()) {
|
if (!fileIterator()) {
|
||||||
QStringList paths;
|
Utils::FilePathList paths;
|
||||||
for (Project *project : SessionManager::projects())
|
for (Project *project : SessionManager::projects())
|
||||||
paths.append(Utils::transform(project->files(Project::AllFiles), &Utils::FilePath::toString));
|
paths.append(project->files(Project::AllFiles));
|
||||||
Utils::sort(paths);
|
Utils::sort(paths);
|
||||||
setFileIterator(new BaseFileFilter::ListIterator(paths));
|
setFileIterator(new BaseFileFilter::ListIterator(paths));
|
||||||
}
|
}
|
||||||
|
@@ -56,9 +56,9 @@ void CurrentProjectFilter::prepareSearch(const QString &entry)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(entry)
|
Q_UNUSED(entry)
|
||||||
if (!fileIterator()) {
|
if (!fileIterator()) {
|
||||||
QStringList paths;
|
Utils::FilePathList paths;
|
||||||
if (m_project)
|
if (m_project)
|
||||||
paths = Utils::transform(m_project->files(Project::AllFiles), &Utils::FilePath::toString);
|
paths = m_project->files(Project::AllFiles);
|
||||||
setFileIterator(new BaseFileFilter::ListIterator(paths));
|
setFileIterator(new BaseFileFilter::ListIterator(paths));
|
||||||
}
|
}
|
||||||
BaseFileFilter::prepareSearch(entry);
|
BaseFileFilter::prepareSearch(entry);
|
||||||
|
Reference in New Issue
Block a user