aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib')
-rw-r--r--src/lib/corelib/api/project.cpp4
-rw-r--r--src/lib/corelib/buildgraph/processcommandexecutor.cpp4
-rw-r--r--src/lib/corelib/language/language.cpp6
-rw-r--r--src/lib/corelib/language/language.h6
-rw-r--r--src/lib/corelib/language/projectresolver.cpp10
-rw-r--r--src/lib/corelib/parser/qmlerror.cpp2
-rw-r--r--src/lib/corelib/parser/qmljslexer.cpp18
-rw-r--r--src/lib/corelib/tools/codelocation.cpp6
-rw-r--r--src/lib/corelib/tools/fileinfo.cpp13
-rw-r--r--src/lib/corelib/tools/fileinfo.h1
-rw-r--r--src/lib/corelib/tools/jsliterals.cpp4
-rw-r--r--src/lib/corelib/tools/jsonhelper.h2
-rw-r--r--src/lib/corelib/tools/persistence.cpp2
-rw-r--r--src/lib/corelib/tools/persistence.h14
-rw-r--r--src/lib/corelib/tools/shellutils.cpp8
-rw-r--r--src/lib/corelib/tools/version.cpp15
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 &regex)
+static bool usesImport(const ExportedProperty &prop, const QRegularExpression &regex)
{
- return regex.indexIn(prop.sourceCode) != -1;
+ return prop.sourceCode.indexOf(regex) != -1;
}
-static bool usesImport(const ExportedItem &item, const QRegExp &regex)
+static bool usesImport(const ExportedItem &item, const QRegularExpression &regex)
{
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 &regexp, 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};
}