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:
hjk
2019-07-23 18:30:00 +02:00
parent 4216702d95
commit 2c0b69cdc5
8 changed files with 50 additions and 88 deletions

View File

@@ -34,7 +34,6 @@
#include <QRegularExpression>
#include <QTimer>
using namespace Core;
using namespace Utils;
namespace Core {
@@ -47,13 +46,11 @@ public:
{
iterator.clear();
previousResultPaths.clear();
previousResultNames.clear();
previousEntry.clear();
}
QSharedPointer<BaseFileFilter::Iterator> iterator;
QStringList previousResultPaths;
QStringList previousResultNames;
FilePathList previousResultPaths;
bool forceNewSearchList;
QString previousEntry;
};
@@ -66,7 +63,6 @@ public:
};
} // Internal
} // Core
BaseFileFilter::Iterator::~Iterator() = default;
@@ -74,7 +70,7 @@ BaseFileFilter::BaseFileFilter()
: d(new Internal::BaseFileFilterPrivate)
{
d->m_data.forceNewSearchList = true;
setFileIterator(new ListIterator(QStringList()));
setFileIterator(new ListIterator({}));
}
BaseFileFilter::~BaseFileFilter()
@@ -87,7 +83,6 @@ void BaseFileFilter::prepareSearch(const QString &entry)
Q_UNUSED(entry)
d->m_current.iterator = d->m_data.iterator;
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.previousEntry = d->m_data.previousEntry;
d->m_data.forceNewSearchList = false;
@@ -132,12 +127,10 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
&& !pathSeparatorAdded;
if (searchInPreviousResults)
d->m_current.iterator.reset(new ListIterator(d->m_current.previousResultPaths,
d->m_current.previousResultNames));
d->m_current.iterator.reset(new ListIterator(d->m_current.previousResultPaths));
QTC_ASSERT(d->m_current.iterator.data(), return QList<LocatorFilterEntry>());
d->m_current.previousResultPaths.clear();
d->m_current.previousResultNames.clear();
d->m_current.previousEntry = fp.filePath;
d->m_current.iterator->toFront();
bool canceled = false;
@@ -148,15 +141,14 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
}
d->m_current.iterator->next();
QString path = d->m_current.iterator->filePath();
QString name = d->m_current.iterator->fileName();
QString matchText = hasPathSeparator ? path : name;
FilePath path = d->m_current.iterator->filePath();
QString matchText = hasPathSeparator ? path.toString() : path.fileName();
QRegularExpressionMatch match = regexp.match(matchText);
if (match.hasMatch()) {
QFileInfo fi(path);
LocatorFilterEntry filterEntry(this, fi.fileName(), QString(path + fp.postfix));
filterEntry.fileName = path;
QFileInfo fi(path.toString());
LocatorFilterEntry filterEntry(this, fi.fileName(), QString(path.toString() + fp.postfix));
filterEntry.fileName = path.toString();
filterEntry.extraInfo = FilePath::fromFileInfo(fi).shortNativePath();
const int matchLevel = matchLevelFor(match, matchText);
@@ -170,7 +162,6 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
entries[matchLevel].append(filterEntry);
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
d->m_data.previousEntry = d->m_current.previousEntry;
d->m_data.previousResultPaths = d->m_current.previousResultPaths;
d->m_data.previousResultNames = d->m_current.previousResultNames;
// forceNewSearchList was already reset in prepareSearch
}
BaseFileFilter::ListIterator::ListIterator(const QStringList &filePaths)
BaseFileFilter::ListIterator::ListIterator(const FilePathList &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();
}
void BaseFileFilter::ListIterator::toFront()
{
m_pathPosition = m_filePaths.constBegin() - 1;
m_namePosition = m_fileNames.constBegin() - 1;
}
bool BaseFileFilter::ListIterator::hasNext() const
@@ -259,25 +236,18 @@ bool BaseFileFilter::ListIterator::hasNext() const
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_namePosition != m_fileNames.constEnd(), return QString());
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return {});
++m_pathPosition;
++m_namePosition;
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return QString());
QTC_ASSERT(m_namePosition != m_fileNames.constEnd(), return QString());
QTC_ASSERT(m_pathPosition != m_filePaths.constEnd(), return {});
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;
}
QString BaseFileFilter::ListIterator::fileName() const
{
QTC_ASSERT(m_namePosition != m_fileNames.constEnd(), return QString());
return *m_namePosition;
}
} // Core

View File

@@ -27,8 +27,9 @@
#include "ilocatorfilter.h"
#include <utils/fileutils.h>
#include <QSharedPointer>
#include <QStringList>
namespace Core {
@@ -44,27 +45,22 @@ public:
virtual ~Iterator();
virtual void toFront() = 0;
virtual bool hasNext() const = 0;
virtual QString next() = 0;
virtual QString filePath() const = 0;
virtual QString fileName() const = 0;
virtual Utils::FilePath next() = 0;
virtual Utils::FilePath filePath() const = 0;
};
class CORE_EXPORT ListIterator : public Iterator {
public:
ListIterator(const QStringList &filePaths);
ListIterator(const QStringList &filePaths, const QStringList &fileNames);
ListIterator(const Utils::FilePathList &filePaths);
void toFront() override;
bool hasNext() const override;
QString next() override;
QString filePath() const override;
QString fileName() const override;
Utils::FilePath next() override;
Utils::FilePath filePath() const override;
private:
QStringList m_filePaths;
QStringList m_fileNames;
QStringList::const_iterator m_pathPosition;
QStringList::const_iterator m_namePosition;
Utils::FilePathList m_filePaths;
Utils::FilePathList::const_iterator m_pathPosition;
};
BaseFileFilter();

View File

@@ -56,7 +56,7 @@ QByteArray DirectoryFilter::saveState() const
out << m_filters;
out << shortcutString();
out << isIncludedByDefault();
out << m_files;
out << Utils::transform(m_files, &Utils::FilePath::toString);
out << m_exclusionFilters;
return value;
}
@@ -69,6 +69,7 @@ void DirectoryFilter::restoreState(const QByteArray &state)
QStringList directories;
QString shortcut;
bool defaultFilter;
QStringList files;
QDataStream in(state);
in >> name;
@@ -76,7 +77,8 @@ void DirectoryFilter::restoreState(const QByteArray &state)
in >> m_filters;
in >> shortcut;
in >> defaultFilter;
in >> m_files;
in >> files;
m_files = Utils::transform(files, &Utils::FilePath::fromString);
if (!in.atEnd()) // Qt Creator 4.3 and later
in >> m_exclusionFilters;
else
@@ -231,12 +233,12 @@ void DirectoryFilter::refresh(QFutureInterface<void> &future)
}
Utils::SubDirFileIterator subDirIterator(directories, m_filters, m_exclusionFilters);
future.setProgressRange(0, subDirIterator.maxProgress());
QStringList filesFound;
Utils::FilePathList filesFound;
auto end = subDirIterator.end();
for (auto it = subDirIterator.begin(); it != end; ++it) {
if (future.isCanceled())
break;
filesFound << (*it).filePath;
filesFound << Utils::FilePath::fromString((*it).filePath);
if (future.isProgressUpdateNeeded()
|| future.progressValue() == 0 /*workaround for regression in Qt*/) {
future.setProgressValueAndText(subDirIterator.currentProgress(),

View File

@@ -77,7 +77,7 @@ private:
QDialog *m_dialog = nullptr;
Internal::Ui::DirectoryFilterOptions *m_ui = nullptr;
mutable QMutex m_lock;
QStringList m_files;
Utils::FilePathList m_files;
bool m_isCustomFilter = true;
};

View File

@@ -45,7 +45,7 @@ QTC_DECLARE_MYTESTDATADIR("../../../../tests/locators/")
class MyBaseFileFilter : public Core::BaseFileFilter
{
public:
MyBaseFileFilter(const QStringList &theFiles)
MyBaseFileFilter(const Utils::FilePathList &theFiles)
{
setFileIterator(new BaseFileFilter::ListIterator(theFiles));
}
@@ -74,7 +74,7 @@ void Core::Internal::CorePlugin::test_basefilefilter()
QFETCH(QStringList, testFiles);
QFETCH(QList<ReferenceData>, referenceDataList);
MyBaseFileFilter filter(testFiles);
MyBaseFileFilter filter(Utils::transform(testFiles, &Utils::FilePath::fromString));
BasicLocatorFilterTest test(&filter);
for (const ReferenceData &reference : qAsConst(referenceDataList)) {

View File

@@ -37,9 +37,9 @@
#include <QTimer>
using namespace Core;
using namespace CppTools;
using namespace CppTools::Internal;
using namespace ProjectExplorer;
using namespace Utils;
namespace CppTools {
namespace Internal {
@@ -50,9 +50,8 @@ public:
void toFront() override;
bool hasNext() const override;
QString next() override;
QString filePath() const override;
QString fileName() const override;
Utils::FilePath next() override;
Utils::FilePath filePath() const override;
private:
void fetchMore();
@@ -62,13 +61,9 @@ private:
QSet<QString> m_queuedPaths;
QSet<QString> m_allResultPaths;
QStringList m_resultQueue;
QString m_currentPath;
FilePath m_currentPath;
};
} // Internal
} // CppTools
CppIncludesIterator::CppIncludesIterator(CPlusPlus::Snapshot snapshot,
const QSet<QString> &seedPaths)
: m_snapshot(snapshot),
@@ -90,26 +85,21 @@ bool CppIncludesIterator::hasNext() const
return !m_resultQueue.isEmpty();
}
QString CppIncludesIterator::next()
FilePath CppIncludesIterator::next()
{
if (m_resultQueue.isEmpty())
return QString();
m_currentPath = m_resultQueue.takeFirst();
return {};
m_currentPath = FilePath::fromString(m_resultQueue.takeFirst());
if (m_resultQueue.isEmpty())
fetchMore();
return m_currentPath;
}
QString CppIncludesIterator::filePath() const
FilePath CppIncludesIterator::filePath() const
{
return m_currentPath;
}
QString CppIncludesIterator::fileName() const
{
return QFileInfo(m_currentPath).fileName();
}
void CppIncludesIterator::fetchMore()
{
while (!m_queuedPaths.isEmpty() && m_resultQueue.isEmpty()) {
@@ -186,3 +176,7 @@ void CppIncludesFilter::markOutdated()
m_needsUpdate = true;
setFileIterator(nullptr); // clean up
}
} // Internal
} // CppTools

View File

@@ -57,9 +57,9 @@ void AllProjectsFilter::prepareSearch(const QString &entry)
{
Q_UNUSED(entry)
if (!fileIterator()) {
QStringList paths;
Utils::FilePathList paths;
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);
setFileIterator(new BaseFileFilter::ListIterator(paths));
}

View File

@@ -56,9 +56,9 @@ void CurrentProjectFilter::prepareSearch(const QString &entry)
{
Q_UNUSED(entry)
if (!fileIterator()) {
QStringList paths;
Utils::FilePathList paths;
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));
}
BaseFileFilter::prepareSearch(entry);