diff options
Diffstat (limited to 'src/lib/corelib')
-rw-r--r-- | src/lib/corelib/api/project.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/processcommandexecutor.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/language.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 10 | ||||
-rw-r--r-- | src/lib/corelib/parser/qmlerror.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/parser/qmljslexer.cpp | 18 | ||||
-rw-r--r-- | src/lib/corelib/tools/codelocation.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/tools/fileinfo.cpp | 13 | ||||
-rw-r--r-- | src/lib/corelib/tools/fileinfo.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/tools/jsliterals.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/tools/jsonhelper.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/tools/persistence.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/tools/persistence.h | 14 | ||||
-rw-r--r-- | src/lib/corelib/tools/shellutils.cpp | 8 | ||||
-rw-r--r-- | src/lib/corelib/tools/version.cpp | 15 |
16 files changed, 55 insertions, 60 deletions
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp index f7a9eca09..e6caf1b2b 100644 --- a/src/lib/corelib/api/project.cpp +++ b/src/lib/corelib/api/project.cpp @@ -82,7 +82,7 @@ #include <tools/qttools.h> #include <QtCore/qdir.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qshareddata.h> #include <mutex> @@ -414,7 +414,7 @@ static bool matchesWildcard(const QString &filePath, const GroupConstPtr &group) } fullPattern.append(QLatin1Char('/')).append(pattern); fullPattern = QDir::cleanPath(fullPattern); - if (QRegExp(fullPattern, Qt::CaseSensitive, QRegExp::Wildcard).exactMatch(filePath)) + if (QRegularExpression(QRegularExpression::wildcardToRegularExpression(fullPattern)).match(filePath).hasMatch()) return true; } return false; diff --git a/src/lib/corelib/buildgraph/processcommandexecutor.cpp b/src/lib/corelib/buildgraph/processcommandexecutor.cpp index 893502726..1026586f7 100644 --- a/src/lib/corelib/buildgraph/processcommandexecutor.cpp +++ b/src/lib/corelib/buildgraph/processcommandexecutor.cpp @@ -184,8 +184,8 @@ bool ProcessCommandExecutor::doStart() } responseFile.close(); m_responseFileName = responseFile.fileName(); - arguments = arguments.mid(0, - std::min(cmd->responseFileArgumentIndex(), arguments.size())); + arguments = arguments.mid(0, std::min<int>(cmd->responseFileArgumentIndex(), + arguments.size())); arguments += QDir::toNativeSeparators(cmd->responseFileUsagePrefix() + responseFile.fileName()); } diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 7b21bc12a..0b472a668 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -102,7 +102,7 @@ void FileTagger::setPatterns(const QStringList &patterns) m_patterns.clear(); for (const QString &pattern : patterns) { QBS_CHECK(!pattern.isEmpty()); - m_patterns << QRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard); + m_patterns << QRegularExpression(QRegularExpression::wildcardToRegularExpression(pattern)); } } @@ -347,8 +347,8 @@ FileTags ResolvedProduct::fileTagsForFileName(const QString &fileName) const FileTags result; std::unique_ptr<int> priority; for (const FileTaggerConstPtr &tagger : qAsConst(fileTaggers)) { - for (const QRegExp &pattern : tagger->patterns()) { - if (FileInfo::globMatches(pattern, fileName)) { + for (const QRegularExpression &pattern : tagger->patterns()) { + if (pattern.match(fileName).hasMatch()) { if (priority) { if (*priority != tagger->priority()) { // The taggers are expected to be sorted by priority. diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index bbd851333..23a5f1d1a 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -58,7 +58,7 @@ #include <QtCore/qdatastream.h> #include <QtCore/qhash.h> #include <QtCore/qprocess.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qstring.h> #include <QtCore/qstringlist.h> #include <QtCore/qvariant.h> @@ -88,7 +88,7 @@ public: return FileTaggerPtr(new FileTagger(patterns, fileTags, priority)); } - const QList<QRegExp> &patterns() const { return m_patterns; } + const QList<QRegularExpression> &patterns() const { return m_patterns; } const FileTags &fileTags() const { return m_fileTags; } int priority() const { return m_priority; } @@ -103,7 +103,7 @@ private: void setPatterns(const QStringList &patterns); - QList<QRegExp> m_patterns; + QList<QRegularExpression> m_patterns; FileTags m_fileTags; int m_priority = 0; }; diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index fd6063381..4e8e94b4e 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -68,7 +68,7 @@ #include <tools/stringconstants.h> #include <QtCore/qdir.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <algorithm> #include <memory> @@ -1052,12 +1052,12 @@ void ProjectResolver::setupExportedProperties(const Item *item, const QString &n std::sort(properties.begin(), properties.end(), less); } -static bool usesImport(const ExportedProperty &prop, const QRegExp ®ex) +static bool usesImport(const ExportedProperty &prop, const QRegularExpression ®ex) { - return regex.indexIn(prop.sourceCode) != -1; + return prop.sourceCode.indexOf(regex) != -1; } -static bool usesImport(const ExportedItem &item, const QRegExp ®ex) +static bool usesImport(const ExportedItem &item, const QRegularExpression ®ex) { return any_of(item.properties, [regex](const ExportedProperty &p) { return usesImport(p, regex); }) @@ -1073,7 +1073,7 @@ static bool usesImport(const ExportedModule &module, const QString &name) // (3) var obj = DataCollection; const QString pattern = QStringLiteral("\\b%1\\b"); - const QRegExp regex(pattern.arg(name)); // std::regex is much slower + const QRegularExpression regex(pattern.arg(name)); // std::regex is much slower return any_of(module.m_properties, [regex](const ExportedProperty &p) { return usesImport(p, regex); }) || any_of(module.children, diff --git a/src/lib/corelib/parser/qmlerror.cpp b/src/lib/corelib/parser/qmlerror.cpp index e72e79f87..d638b7202 100644 --- a/src/lib/corelib/parser/qmlerror.cpp +++ b/src/lib/corelib/parser/qmlerror.cpp @@ -271,7 +271,7 @@ QDebug operator<<(QDebug debug, const QmlError &error) if (error.column() > 0) { int column = std::max(0, error.column() - 1); - column = std::min(column, line.length()); + column = std::min<int>(column, line.length()); QByteArray ind; ind.reserve(column); diff --git a/src/lib/corelib/parser/qmljslexer.cpp b/src/lib/corelib/parser/qmljslexer.cpp index f8e83c338..931704339 100644 --- a/src/lib/corelib/parser/qmljslexer.cpp +++ b/src/lib/corelib/parser/qmljslexer.cpp @@ -46,7 +46,11 @@ #include <QtCore/qdebug.h> QT_BEGIN_NAMESPACE -Q_CORE_EXPORT double qstrtod(const char *s00, char const **se, bool *ok); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +Q_CORE_EXPORT double qstrntod(const char *s00, int len, char const **se, bool *ok); +#else +Q_CORE_EXPORT double qstrntod(const char *s00, qsizetype len, char const **se, bool *ok); +#endif QT_END_NAMESPACE namespace QbsQmlJS { @@ -453,15 +457,13 @@ again: } } - chars.append('\0'); - const char *begin = chars.constData(); const char *end = nullptr; bool ok = false; - _tokenValue = qstrtod(begin, &end, &ok); + _tokenValue = qstrntod(begin, chars.size(), &end, &ok); - if (end - begin != chars.size() - 1) { + if (end - begin != chars.size()) { _errorCode = IllegalExponentIndicator; _errorMessage = QCoreApplication::translate("QmlParser", "Illegal syntax for exponential number"); return T_ERROR; @@ -846,15 +848,13 @@ int Lexer::scanNumber(QChar ch) return T_NUMERIC_LITERAL; } - chars.append('\0'); - const char *begin = chars.constData(); const char *end = nullptr; bool ok = false; - _tokenValue = qstrtod(begin, &end, &ok); + _tokenValue = qstrntod(begin, chars.size(), &end, &ok); - if (end - begin != chars.size() - 1) { + if (end - begin != chars.size()) { _errorCode = IllegalExponentIndicator; _errorMessage = QCoreApplication::translate("QmlParser", "Illegal syntax for exponential number"); return T_ERROR; diff --git a/src/lib/corelib/tools/codelocation.cpp b/src/lib/corelib/tools/codelocation.cpp index 542408795..ebfd5edc6 100644 --- a/src/lib/corelib/tools/codelocation.cpp +++ b/src/lib/corelib/tools/codelocation.cpp @@ -47,7 +47,7 @@ #include <QtCore/qdir.h> #include <QtCore/qjsonobject.h> #include <QtCore/qjsonvalue.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> @@ -118,9 +118,9 @@ QString CodeLocation::toString() const if (isValid()) { str = QDir::toNativeSeparators(filePath()); QString lineAndColumn; - if (line() > 0 && !str.contains(QRegExp(QStringLiteral(":[0-9]+$")))) + if (line() > 0 && !str.contains(QRegularExpression(QStringLiteral(":[0-9]+$")))) lineAndColumn += QLatin1Char(':') + QString::number(line()); - if (column() > 0 && !str.contains(QRegExp(QStringLiteral(":[0-9]+:[0-9]+$")))) + if (column() > 0 && !str.contains(QRegularExpression(QStringLiteral(":[0-9]+:[0-9]+$")))) lineAndColumn += QLatin1Char(':') + QString::number(column()); str += lineAndColumn; } diff --git a/src/lib/corelib/tools/fileinfo.cpp b/src/lib/corelib/tools/fileinfo.cpp index 8f6b285d4..6fdd90fb1 100644 --- a/src/lib/corelib/tools/fileinfo.cpp +++ b/src/lib/corelib/tools/fileinfo.cpp @@ -47,7 +47,7 @@ #include <QtCore/qdatetime.h> #include <QtCore/qdir.h> #include <QtCore/qfileinfo.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #if defined(Q_OS_UNIX) #include <cerrno> @@ -242,17 +242,6 @@ QString FileInfo::resolvePath(const QString &base, const QString &rel, HostOsInf return r; } -bool FileInfo::globMatches(const QRegExp ®exp, const QString &fileName) -{ - const QString pattern = regexp.pattern(); - // May be it's simple wildcard, i.e. "*.cpp"? - if (pattern.startsWith(QLatin1Char('*')) && !isPattern(pattern.midRef(1))) { - // Yes, it's rather simple to just check the extension - return fileName.endsWith(pattern.midRef(1)); - } - return regexp.exactMatch(fileName); -} - #ifdef Q_OS_WIN static QString prependLongPathPrefix(const QString &absolutePath) { diff --git a/src/lib/corelib/tools/fileinfo.h b/src/lib/corelib/tools/fileinfo.h index 9813b69a7..c4ca5931a 100644 --- a/src/lib/corelib/tools/fileinfo.h +++ b/src/lib/corelib/tools/fileinfo.h @@ -79,7 +79,6 @@ public: static bool isPattern(const QString &str); static QString resolvePath(const QString &base, const QString &rel, HostOsInfo::HostOs hostOs = HostOsInfo::hostOs()); - static bool globMatches(const QRegExp &pattern, const QString &subject); static bool isFileCaseCorrect(const QString &filePath); // Symlink-correct check. diff --git a/src/lib/corelib/tools/jsliterals.cpp b/src/lib/corelib/tools/jsliterals.cpp index 74328006c..69d170336 100644 --- a/src/lib/corelib/tools/jsliterals.cpp +++ b/src/lib/corelib/tools/jsliterals.cpp @@ -41,7 +41,7 @@ #include <tools/stringconstants.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> namespace qbs { @@ -53,7 +53,7 @@ QString toJSLiteral(const bool b) QString toJSLiteral(const QString &str) { QString js = str; - js.replace(QRegExp(QLatin1String("([\\\\\"])")), QLatin1String("\\\\1")); + js.replace(QRegularExpression(QLatin1String("([\\\\\"])")), QLatin1String("\\\\1")); js.prepend(QLatin1Char('"')); js.append(QLatin1Char('"')); return js; diff --git a/src/lib/corelib/tools/jsonhelper.h b/src/lib/corelib/tools/jsonhelper.h index 991d6bd6c..e695bd465 100644 --- a/src/lib/corelib/tools/jsonhelper.h +++ b/src/lib/corelib/tools/jsonhelper.h @@ -62,7 +62,7 @@ template<> inline QStringList fromJson(const QJsonValue &v) const QJsonArray &jsonList = v.toArray(); QStringList stringList; std::transform(jsonList.begin(), jsonList.end(), std::back_inserter(stringList), - [](const QVariant &v) { return v.toString(); }); + [](const auto &v) { return v.toString(); }); return stringList; } template<> inline QVariantMap fromJson(const QJsonValue &v) { return v.toObject().toVariantMap(); } diff --git a/src/lib/corelib/tools/persistence.cpp b/src/lib/corelib/tools/persistence.cpp index 3f2b57e01..18145eafb 100644 --- a/src/lib/corelib/tools/persistence.cpp +++ b/src/lib/corelib/tools/persistence.cpp @@ -48,7 +48,7 @@ namespace qbs { namespace Internal { -static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-128"; +static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-129"; NoBuildGraphError::NoBuildGraphError(const QString &filePath) : ErrorInfo(Tr::tr("Build graph not found for configuration '%1'. Expected location was '%2'.") diff --git a/src/lib/corelib/tools/persistence.h b/src/lib/corelib/tools/persistence.h index e00310321..f97604b42 100644 --- a/src/lib/corelib/tools/persistence.h +++ b/src/lib/corelib/tools/persistence.h @@ -48,7 +48,7 @@ #include <QtCore/qdatastream.h> #include <QtCore/qflags.h> #include <QtCore/qprocess.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qstring.h> #include <QtCore/qvariant.h> @@ -426,10 +426,16 @@ template<> struct PPHelper<QVariant> static void load(QVariant &v, PersistentPool *pool) { v = pool->loadVariant(); } }; -template<> struct PPHelper<QRegExp> +template<> struct PPHelper<QRegularExpression> { - static void store(const QRegExp &re, PersistentPool *pool) { pool->store(re.pattern()); } - static void load(QRegExp &re, PersistentPool *pool) { re.setPattern(pool->load<QString>()); } + static void store(const QRegularExpression &re, PersistentPool *pool) + { + pool->store(re.pattern()); + } + static void load(QRegularExpression &re, PersistentPool *pool) + { + re.setPattern(pool->load<QString>()); + } }; template<typename T, typename U> struct PPHelper<std::pair<T, U>> diff --git a/src/lib/corelib/tools/shellutils.cpp b/src/lib/corelib/tools/shellutils.cpp index 33ab2c76c..d032aecac 100644 --- a/src/lib/corelib/tools/shellutils.cpp +++ b/src/lib/corelib/tools/shellutils.cpp @@ -44,7 +44,7 @@ #include "qttools.h" #include <QtCore/qfile.h> -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qtextstream.h> namespace qbs { @@ -56,7 +56,7 @@ QString shellInterpreter(const QString &filePath) { QTextStream ts(&file); const QString shebang = ts.readLine(); if (shebang.startsWith(QLatin1String("#!"))) { - return (shebang.mid(2).split(QRegExp(QStringLiteral("\\s")), + return (shebang.mid(2).split(QRegularExpression(QStringLiteral("\\s")), QBS_SKIP_EMPTY_PARTS) << QString()).front(); } } @@ -125,9 +125,9 @@ static QString shellQuoteWin(const QString &arg) // The process-level standard quoting allows escaping quotes with backslashes (note // that backslashes don't escape themselves, unless they are followed by a quote). // Consequently, quotes are escaped and their preceding backslashes are doubled. - ret.replace(QRegExp(QLatin1String("(\\\\*)\"")), QLatin1String("\\1\\1\\\"")); + ret.replace(QRegularExpression(QLatin1String("(\\\\*)\"")), QLatin1String("\\1\\1\\\"")); // Trailing backslashes must be doubled as well, as they are followed by a quote. - ret.replace(QRegExp(QLatin1String("(\\\\+)$")), QLatin1String("\\1\\1")); + ret.replace(QRegularExpression(QLatin1String("(\\\\+)$")), QLatin1String("\\1\\1")); // However, the shell also interprets the command, and no backslash-escaping exists // there - a quote always toggles the quoting state, but is nonetheless passed down // to the called process verbatim. In the unquoted state, the circumflex escapes diff --git a/src/lib/corelib/tools/version.cpp b/src/lib/corelib/tools/version.cpp index f653256b3..719bc386f 100644 --- a/src/lib/corelib/tools/version.cpp +++ b/src/lib/corelib/tools/version.cpp @@ -39,7 +39,7 @@ #include "version.h" -#include <QtCore/qregexp.h> +#include <QtCore/qregularexpression.h> #include <QtCore/qstring.h> namespace qbs { @@ -51,13 +51,14 @@ Version Version::fromString(const QString &versionString, bool buildNumberAllowe pattern += QStringLiteral("(?:\\.(\\d+))?"); // Followed by a dot and a number up to two times. if (buildNumberAllowed) pattern += QStringLiteral("(?:[-.](\\d+))?"); // And possibly a dash or dot followed by the build number. - QRegExp rex(pattern); - if (!rex.exactMatch(versionString)) + const QRegularExpression rex(QRegularExpression::anchoredPattern(pattern)); + const QRegularExpressionMatch match = rex.match(versionString); + if (!match.hasMatch()) return Version{}; - const int majorNr = rex.cap(1).toInt(); - const int minorNr = rex.captureCount() >= 2 ? rex.cap(2).toInt() : 0; - const int patchNr = rex.captureCount() >= 3 ? rex.cap(3).toInt() : 0; - const int buildNr = rex.captureCount() >= 4 ? rex.cap(4).toInt() : 0; + const int majorNr = match.captured(1).toInt(); + const int minorNr = match.lastCapturedIndex() >= 2 ? match.captured(2).toInt() : 0; + const int patchNr = match.lastCapturedIndex() >= 3 ? match.captured(3).toInt() : 0; + const int buildNr = match.lastCapturedIndex() >= 4 ? match.captured(4).toInt() : 0; return Version{majorNr, minorNr, patchNr, buildNr}; } |