From f154b23c78801c9c4be0964ed429bd37480cf625 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 17 Jul 2020 09:14:44 +0200 Subject: [PATCH] Utils: Replace QRegExp by QRegularExpression Task-number: QTCREATORBUG-24098 Change-Id: I0e29d2a43de6ff29dfeb5c9c70ac18ed95ba2657 Reviewed-by: hjk --- src/libs/utils/filenamevalidatinglineedit.cpp | 16 ++++++------ src/libs/utils/filesearch.cpp | 25 ++++++++++--------- src/libs/utils/mimetypes/mimeglobpattern.cpp | 7 +++--- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/libs/utils/filenamevalidatinglineedit.cpp b/src/libs/utils/filenamevalidatinglineedit.cpp index a3973a8c1ea..eb850abbfa2 100644 --- a/src/libs/utils/filenamevalidatinglineedit.cpp +++ b/src/libs/utils/filenamevalidatinglineedit.cpp @@ -26,7 +26,7 @@ #include "filenamevalidatinglineedit.h" #include "qtcassert.h" -#include +#include #include /*! @@ -46,16 +46,18 @@ namespace Utils { // Naming a file like a device name will break on Windows, even if it is // "com1.txt". Since we are cross-platform, we generally disallow such file // names. -static const QRegExp &windowsDeviceNoSubDirPattern() +static const QRegularExpression &windowsDeviceNoSubDirPattern() { - static const QRegExp rc(QLatin1String(WINDOWS_DEVICES_PATTERN), Qt::CaseInsensitive); + static const QRegularExpression rc(QString("^" WINDOWS_DEVICES_PATTERN "$"), + QRegularExpression::CaseInsensitiveOption); QTC_ASSERT(rc.isValid(), return rc); return rc; } -static const QRegExp &windowsDeviceSubDirPattern() +static const QRegularExpression &windowsDeviceSubDirPattern() { - static const QRegExp rc(QLatin1String(".*[/\\\\]" WINDOWS_DEVICES_PATTERN), Qt::CaseInsensitive); + static const QRegularExpression rc(QString("^.*[/\\\\]" WINDOWS_DEVICES_PATTERN "$"), + QRegularExpression::CaseInsensitiveOption); QTC_ASSERT(rc.isValid(), return rc); return rc; } @@ -135,9 +137,9 @@ bool FileNameValidatingLineEdit::validateFileName(const QString &name, } } // Windows devices - bool matchesWinDevice = windowsDeviceNoSubDirPattern().exactMatch(name); + bool matchesWinDevice = name.contains(windowsDeviceNoSubDirPattern()); if (!matchesWinDevice && allowDirectories) - matchesWinDevice = windowsDeviceSubDirPattern().exactMatch(name); + matchesWinDevice = name.contains(windowsDeviceSubDirPattern()); if (matchesWinDevice) { if (errorMessage) *errorMessage = tr("Name matches MS Windows device" diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp index 4af8079adf0..efc46b77de2 100644 --- a/src/libs/utils/filesearch.cpp +++ b/src/libs/utils/filesearch.cpp @@ -30,7 +30,6 @@ #include #include -#include #include #include @@ -475,22 +474,24 @@ QString matchCaseReplacement(const QString &originalText, const QString &replace } } // namespace -static QList filtersToRegExps(const QStringList &filters) +static QList filtersToRegExps(const QStringList &filters) { return Utils::transform(filters, [](const QString &filter) { - return QRegExp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); + return QRegularExpression(QRegularExpression::wildcardToRegularExpression(filter), + QRegularExpression::CaseInsensitiveOption); }); } -static bool matches(const QList &exprList, const QString &filePath) +static bool matches(const QList &exprList, const QString &filePath) { - return Utils::anyOf(exprList, [&filePath](QRegExp reg) { - return (reg.exactMatch(filePath) - || reg.exactMatch(FilePath::fromString(filePath).fileName())); + return Utils::anyOf(exprList, [&filePath](const QRegularExpression ®) { + return (reg.match(filePath).hasMatch() + || reg.match(FilePath::fromString(filePath).fileName()).hasMatch()); }); } -static bool isFileIncluded(const QList &filterRegs, const QList &exclusionRegs, +static bool isFileIncluded(const QList &filterRegs, + const QList &exclusionRegs, const QString &filePath) { const bool isIncluded = filterRegs.isEmpty() || matches(filterRegs, filePath); @@ -500,8 +501,8 @@ static bool isFileIncluded(const QList &filterRegs, const QList filterFileFunction(const QStringList &filters, const QStringList &exclusionFilters) { - const QList filterRegs = filtersToRegExps(filters); - const QList exclusionRegs = filtersToRegExps(exclusionFilters); + const QList filterRegs = filtersToRegExps(filters); + const QList exclusionRegs = filtersToRegExps(exclusionFilters); return [filterRegs, exclusionRegs](const QString &filePath) { return isFileIncluded(filterRegs, exclusionRegs, filePath); }; @@ -510,8 +511,8 @@ filterFileFunction(const QStringList &filters, const QStringList &exclusionFilte std::function filterFilesFunction(const QStringList &filters, const QStringList &exclusionFilters) { - const QList filterRegs = filtersToRegExps(filters); - const QList exclusionRegs = filtersToRegExps(exclusionFilters); + const QList filterRegs = filtersToRegExps(filters); + const QList exclusionRegs = filtersToRegExps(exclusionFilters); return [filterRegs, exclusionRegs](const QStringList &filePaths) { return Utils::filtered(filePaths, [&filterRegs, &exclusionRegs](const QString &filePath) { return isFileIncluded(filterRegs, exclusionRegs, filePath); diff --git a/src/libs/utils/mimetypes/mimeglobpattern.cpp b/src/libs/utils/mimetypes/mimeglobpattern.cpp index d67d695d003..dc947b3c91f 100644 --- a/src/libs/utils/mimetypes/mimeglobpattern.cpp +++ b/src/libs/utils/mimetypes/mimeglobpattern.cpp @@ -39,7 +39,7 @@ #include "mimeglobpattern_p.h" -#include +#include #include #include @@ -138,8 +138,9 @@ bool MimeGlobPattern::matchFileName(const QString &inputFilename) const return (m_pattern == filename); // Other (quite rare) patterns, like "*.anim[1-9j]": use slow but correct method - QRegExp rx(m_pattern, Qt::CaseSensitive, QRegExp::WildcardUnix); - return rx.exactMatch(filename); + const QRegularExpression rx(QRegularExpression::anchoredPattern( + QRegularExpression::wildcardToRegularExpression(m_pattern))); + return rx.match(filename).hasMatch(); } static bool isFastPattern(const QString &pattern)