summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2020-08-12 11:58:54 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2020-08-19 19:48:03 +0200
commita8028a02df32355f4df4c036dbb82e9f8e8d527f (patch)
treeca5ae77f5de57a7828a526d85e702e053b63e727
parenta2cec17407b83aed23b01065f4e10d32008552e1 (diff)
Port the QXmlStream API from QStringRef to QStringView
This gives some source incompatibilities, most of them can be handled by using auto instead of QStringRef explicitly. [ChangeLog][Important API changes] QXmlStream now uses QStringView insteead of QStringRef in it's API. Using auto forvariables returning a QStringRef in Qt 5 should lead to code that can be used against both Qt versions. Fixes: QTBUG-84317 Change-Id: I6df3a9507276f5d16d044a6bdbe0e4810cf99440 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
-rw-r--r--examples/corelib/serialization/convert/xmlconverter.cpp8
-rw-r--r--examples/embedded/flightinfo/flightinfo.cpp26
-rw-r--r--examples/network/googlesuggest/googlesuggest.cpp4
-rw-r--r--examples/widgets/animation/sub-attaq/graphicsscene.cpp8
-rw-r--r--examples/xml/rsslisting/rsslisting.cpp4
-rw-r--r--src/corelib/mimetypes/qmimeprovider.cpp4
-rw-r--r--src/corelib/mimetypes/qmimetypeparser.cpp16
-rw-r--r--src/corelib/mimetypes/qmimetypeparser_p.h2
-rw-r--r--src/corelib/serialization/qxmlstream.cpp94
-rw-r--r--src/corelib/serialization/qxmlstream.h69
-rw-r--r--src/tools/qvkgen/qvkgen.cpp4
-rw-r--r--src/tools/uic/uic.cpp2
-rw-r--r--src/xml/dom/qdomhelpers.cpp47
13 files changed, 138 insertions, 150 deletions
diff --git a/examples/corelib/serialization/convert/xmlconverter.cpp b/examples/corelib/serialization/convert/xmlconverter.cpp
index 42cb10100a..87ba9b5156 100644
--- a/examples/corelib/serialization/convert/xmlconverter.cpp
+++ b/examples/corelib/serialization/convert/xmlconverter.cpp
@@ -195,7 +195,7 @@ static QVariant mapFromXml(QXmlStreamReader &xml, Converter::Options options)
static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options)
{
- QStringRef name = xml.name();
+ QStringView name = xml.name();
if (name == QLatin1String("list"))
return listFromXml(xml, options);
if (name == QLatin1String("map"))
@@ -207,7 +207,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
}
QXmlStreamAttributes attrs = xml.attributes();
- QStringRef type = attrs.value(QLatin1String("type"));
+ QStringView type = attrs.value(QLatin1String("type"));
forever {
xml.readNext();
@@ -222,7 +222,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
exit(EXIT_FAILURE);
}
- QStringRef text = xml.text();
+ QStringView text = xml.text();
if (!xml.isCDATA())
text = text.trimmed();
@@ -247,7 +247,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
}
} else if (type == QLatin1String("bytes")) {
QByteArray data = text.toLatin1();
- QStringRef encoding = attrs.value("encoding");
+ QStringView encoding = attrs.value("encoding");
if (encoding == QLatin1String("base64url")) {
result = QByteArray::fromBase64(data, QByteArray::Base64UrlEncoding);
} else if (encoding == QLatin1String("hex")) {
diff --git a/examples/embedded/flightinfo/flightinfo.cpp b/examples/embedded/flightinfo/flightinfo.cpp
index f7df368dd7..0f8dfb5b6a 100644
--- a/examples/embedded/flightinfo/flightinfo.cpp
+++ b/examples/embedded/flightinfo/flightinfo.cpp
@@ -265,20 +265,20 @@ private:
xml.readNext();
if (xml.tokenType() == QXmlStreamReader::StartElement) {
- QStringRef className = xml.attributes().value("class");
- inFlightName |= xml.name() == "h1";
- inFlightStatus |= className == "FlightDetailHeaderStatus";
- inFlightMap |= className == "flightMap";
- if (xml.name() == "td" && !className.isEmpty()) {
- if (className.contains("fieldTitle")) {
+ auto className = xml.attributes().value("class");
+ inFlightName |= xml.name() == u"h1";
+ inFlightStatus |= className == u"FlightDetailHeaderStatus";
+ inFlightMap |= className == u"flightMap";
+ if (xml.name() == u"td" && !className.isEmpty()) {
+ if (className.contains(u"fieldTitle")) {
inFieldName = true;
fieldNames += QString();
fieldValues += QString();
}
- if (className.contains("fieldValue"))
+ if (className.contains(u"fieldValue"))
inFieldValue = true;
}
- if (xml.name() == "img" && inFlightMap) {
+ if (xml.name() == u"img" && inFlightMap) {
const QByteArray encoded
= ("http://mobile.flightview.com/" % xml.attributes().value("src")).toLatin1();
QUrl url = QUrl::fromPercentEncoding(encoded);
@@ -287,11 +287,11 @@ private:
}
if (xml.tokenType() == QXmlStreamReader::EndElement) {
- inFlightName &= xml.name() != "h1";
- inFlightStatus &= xml.name() != "div";
- inFlightMap &= xml.name() != "div";
- inFieldName &= xml.name() != "td";
- inFieldValue &= xml.name() != "td";
+ inFlightName &= xml.name() != u"h1";
+ inFlightStatus &= xml.name() != u"div";
+ inFlightMap &= xml.name() != u"div";
+ inFieldName &= xml.name() != u"td";
+ inFieldValue &= xml.name() != u"td";
}
if (xml.tokenType() == QXmlStreamReader::Characters) {
diff --git a/examples/network/googlesuggest/googlesuggest.cpp b/examples/network/googlesuggest/googlesuggest.cpp
index 04a60103b2..b7b6d3ab62 100644
--- a/examples/network/googlesuggest/googlesuggest.cpp
+++ b/examples/network/googlesuggest/googlesuggest.cpp
@@ -217,8 +217,8 @@ void GSuggestCompletion::handleNetworkData(QNetworkReply *networkReply)
while (!xml.atEnd()) {
xml.readNext();
if (xml.tokenType() == QXmlStreamReader::StartElement)
- if (xml.name() == "suggestion") {
- QStringRef str = xml.attributes().value("data");
+ if (xml.name() == u"suggestion") {
+ auto str = xml.attributes().value("data");
choices << str.toString();
}
}
diff --git a/examples/widgets/animation/sub-attaq/graphicsscene.cpp b/examples/widgets/animation/sub-attaq/graphicsscene.cpp
index c7e2d269c8..5248ed9f92 100644
--- a/examples/widgets/animation/sub-attaq/graphicsscene.cpp
+++ b/examples/widgets/animation/sub-attaq/graphicsscene.cpp
@@ -103,21 +103,21 @@ GraphicsScene::GraphicsScene(int x, int y, int width, int height, Mode mode, QOb
while (!reader.atEnd()) {
reader.readNext();
if (reader.tokenType() == QXmlStreamReader::StartElement) {
- if (reader.name() == "submarine") {
+ if (reader.name() == u"submarine") {
SubmarineDescription desc;
desc.name = reader.attributes().value("name").toString();
desc.points = reader.attributes().value("points").toInt();
desc.type = reader.attributes().value("type").toInt();
submarinesData.append(desc);
- } else if (reader.name() == "level") {
+ } else if (reader.name() == u"level") {
currentLevel.id = reader.attributes().value("id").toInt();
currentLevel.name = reader.attributes().value("name").toString();
- } else if (reader.name() == "subinstance") {
+ } else if (reader.name() == u"subinstance") {
currentLevel.submarines.append(qMakePair(reader.attributes().value("type").toInt(),
reader.attributes().value("nb").toInt()));
}
} else if (reader.tokenType() == QXmlStreamReader::EndElement) {
- if (reader.name() == "level") {
+ if (reader.name() == u"level") {
levelsData.insert(currentLevel.id, currentLevel);
currentLevel.submarines.clear();
}
diff --git a/examples/xml/rsslisting/rsslisting.cpp b/examples/xml/rsslisting/rsslisting.cpp
index 143ad6dcba..0d68d1792a 100644
--- a/examples/xml/rsslisting/rsslisting.cpp
+++ b/examples/xml/rsslisting/rsslisting.cpp
@@ -214,11 +214,11 @@ void RSSListing::parseXml()
while (!xml.atEnd()) {
xml.readNext();
if (xml.isStartElement()) {
- if (xml.name() == "item")
+ if (xml.name() == u"item")
linkString = xml.attributes().value("rss:about").toString();
currentTag = xml.name().toString();
} else if (xml.isEndElement()) {
- if (xml.name() == "item") {
+ if (xml.name() == u"item") {
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0, titleString);
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp
index 47b5e42167..6766a1bbec 100644
--- a/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/src/corelib/mimetypes/qmimeprovider.cpp
@@ -517,14 +517,14 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
if (xml.name() != QLatin1String("mime-type")) {
continue;
}
- const QStringRef name = xml.attributes().value(QLatin1String("type"));
+ const auto name = xml.attributes().value(QLatin1String("type"));
if (name.isEmpty())
continue;
if (name.compare(data.name, Qt::CaseInsensitive))
qWarning() << "Got name" << name << "in file" << file << "expected" << data.name;
while (xml.readNextStartElement()) {
- const QStringRef tag = xml.name();
+ const auto tag = xml.name();
if (tag == QLatin1String("comment")) {
QString lang = xml.attributes().value(QLatin1String("xml:lang")).toString();
const QString text = xml.readElementText();
diff --git a/src/corelib/mimetypes/qmimetypeparser.cpp b/src/corelib/mimetypes/qmimetypeparser.cpp
index dc1c444c56..aa5427b16a 100644
--- a/src/corelib/mimetypes/qmimetypeparser.cpp
+++ b/src/corelib/mimetypes/qmimetypeparser.cpp
@@ -107,7 +107,7 @@ static const char matchMaskAttributeC[] = "mask";
Overwrite to process the sequence of parsed data
*/
-QMimeTypeParserBase::ParseState QMimeTypeParserBase::nextState(ParseState currentState, const QStringRef &startElement)
+QMimeTypeParserBase::ParseState QMimeTypeParserBase::nextState(ParseState currentState, QStringView startElement)
{
switch (currentState) {
case ParseBeginning:
@@ -174,7 +174,7 @@ struct CreateMagicMatchRuleResult {
QString errorMessage; // must be first
QMimeMagicRule rule;
- CreateMagicMatchRuleResult(const QStringRef &type, const QStringRef &value, const QStringRef &offsets, const QStringRef &mask)
+ CreateMagicMatchRuleResult(QStringView type, QStringView value, QStringView offsets, QStringView mask)
: errorMessage(), rule(type.toString(), value.toUtf8(), offsets.toString(), mask.toLatin1(), &errorMessage)
{
@@ -183,10 +183,10 @@ struct CreateMagicMatchRuleResult {
static CreateMagicMatchRuleResult createMagicMatchRule(const QXmlStreamAttributes &atts)
{
- const QStringRef type = atts.value(QLatin1String(matchTypeAttributeC));
- const QStringRef value = atts.value(QLatin1String(matchValueAttributeC));
- const QStringRef offsets = atts.value(QLatin1String(matchOffsetAttributeC));
- const QStringRef mask = atts.value(QLatin1String(matchMaskAttributeC));
+ const auto type = atts.value(QLatin1String(matchTypeAttributeC));
+ const auto value = atts.value(QLatin1String(matchValueAttributeC));
+ const auto offsets = atts.value(QLatin1String(matchOffsetAttributeC));
+ const auto mask = atts.value(QLatin1String(matchMaskAttributeC));
return CreateMagicMatchRuleResult(type, value, offsets, mask);
}
#endif
@@ -265,7 +265,7 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString
break;
case ParseMagic: {
priority = 50;
- const QStringRef priorityS = atts.value(QLatin1String(priorityAttributeC));
+ const auto priorityS = atts.value(QLatin1String(priorityAttributeC));
if (!priorityS.isEmpty()) {
if (!parseNumber(priorityS, &priority, errorMessage))
return false;
@@ -301,7 +301,7 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString
// continue switch QXmlStreamReader::Token...
case QXmlStreamReader::EndElement: // Finished element
{
- const QStringRef elementName = reader.name();
+ const auto elementName = reader.name();
if (elementName == QLatin1String(mimeTypeTagC)) {
if (!process(QMimeType(data), errorMessage))
return false;
diff --git a/src/corelib/mimetypes/qmimetypeparser_p.h b/src/corelib/mimetypes/qmimetypeparser_p.h
index dbd3415d77..6f1869e399 100644
--- a/src/corelib/mimetypes/qmimetypeparser_p.h
+++ b/src/corelib/mimetypes/qmimetypeparser_p.h
@@ -98,7 +98,7 @@ private:
ParseError
};
- static ParseState nextState(ParseState currentState, const QStringRef &startElement);
+ static ParseState nextState(ParseState currentState, QStringView startElement);
};
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index ba6e3059df..9963fa60ec 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -384,13 +384,9 @@ QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const
token at the time it is reported. In addition, QXmlStreamReader
avoids the many small string allocations that it normally takes to
map an XML document to a convenient and Qt-ish API. It does this by
- reporting all string data as QStringRef rather than real QString
- objects. QStringRef is a thin wrapper around QString substrings that
- provides a subset of the QString API without the memory allocation
- and reference-counting overhead. Calling
- \l{QStringRef::toString()}{toString()} on any of those objects
- returns an equivalent real QString object.
-
+ reporting all string data as QStringView rather than real QString
+ objects. Calling \l{QStringView::toString()}{toString()} on any of
+ those objects returns an equivalent real QString object.
*/
@@ -1928,7 +1924,7 @@ qint64 QXmlStreamReader::characterOffset() const
/*! Returns the text of \l Characters, \l Comment, \l DTD, or
EntityReference.
*/
-QStringRef QXmlStreamReader::text() const
+QStringView QXmlStreamReader::text() const
{
Q_D(const QXmlStreamReader);
return d->text;
@@ -1971,12 +1967,12 @@ QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const
name. Otherwise an empty string is returned.
*/
-QStringRef QXmlStreamReader::dtdName() const
+QStringView QXmlStreamReader::dtdName() const
{
Q_D(const QXmlStreamReader);
if (d->type == QXmlStreamReader::DTD)
return d->dtdName;
- return QStringRef();
+ return QStringView();
}
/*!
@@ -1986,12 +1982,12 @@ QStringRef QXmlStreamReader::dtdName() const
public identifier. Otherwise an empty string is returned.
*/
-QStringRef QXmlStreamReader::dtdPublicId() const
+QStringView QXmlStreamReader::dtdPublicId() const
{
Q_D(const QXmlStreamReader);
if (d->type == QXmlStreamReader::DTD)
return d->dtdPublicId;
- return QStringRef();
+ return QStringView();
}
/*!
@@ -2001,12 +1997,12 @@ QStringRef QXmlStreamReader::dtdPublicId() const
system identifier. Otherwise an empty string is returned.
*/
-QStringRef QXmlStreamReader::dtdSystemId() const
+QStringView QXmlStreamReader::dtdSystemId() const
{
Q_D(const QXmlStreamReader);
if (d->type == QXmlStreamReader::DTD)
return d->dtdSystemId;
- return QStringRef();
+ return QStringView();
}
/*!
@@ -2187,7 +2183,7 @@ QXmlStreamReader::Error QXmlStreamReader::error() const
/*!
Returns the target of a ProcessingInstruction.
*/
-QStringRef QXmlStreamReader::processingInstructionTarget() const
+QStringView QXmlStreamReader::processingInstructionTarget() const
{
Q_D(const QXmlStreamReader);
return d->processingInstructionTarget;
@@ -2196,7 +2192,7 @@ QStringRef QXmlStreamReader::processingInstructionTarget() const
/*!
Returns the data of a ProcessingInstruction.
*/
-QStringRef QXmlStreamReader::processingInstructionData() const
+QStringView QXmlStreamReader::processingInstructionData() const
{
Q_D(const QXmlStreamReader);
return d->processingInstructionData;
@@ -2209,7 +2205,7 @@ QStringRef QXmlStreamReader::processingInstructionData() const
\sa namespaceUri(), qualifiedName()
*/
-QStringRef QXmlStreamReader::name() const
+QStringView QXmlStreamReader::name() const
{
Q_D(const QXmlStreamReader);
return d->name;
@@ -2220,7 +2216,7 @@ QStringRef QXmlStreamReader::name() const
\sa name(), qualifiedName()
*/
-QStringRef QXmlStreamReader::namespaceUri() const
+QStringView QXmlStreamReader::namespaceUri() const
{
Q_D(const QXmlStreamReader);
return d->namespaceUri;
@@ -2238,7 +2234,7 @@ QStringRef QXmlStreamReader::namespaceUri() const
\sa name(), prefix(), namespaceUri()
*/
-QStringRef QXmlStreamReader::qualifiedName() const
+QStringView QXmlStreamReader::qualifiedName() const
{
Q_D(const QXmlStreamReader);
return d->qualifiedName;
@@ -2253,7 +2249,7 @@ QStringRef QXmlStreamReader::qualifiedName() const
\sa name(), qualifiedName()
*/
-QStringRef QXmlStreamReader::prefix() const
+QStringView QXmlStreamReader::prefix() const
{
Q_D(const QXmlStreamReader);
return d->prefix;
@@ -2317,15 +2313,15 @@ QXmlStreamAttribute::QXmlStreamAttribute(const QString &qualifiedName, const QSt
m_value = QXmlStreamStringRef(QStringRef(&value));
}
-/*! \fn QStringRef QXmlStreamAttribute::namespaceUri() const
+/*! \fn QStringView QXmlStreamAttribute::namespaceUri() const
Returns the attribute's resolved namespaceUri, or an empty string
reference if the attribute does not have a defined namespace.
*/
-/*! \fn QStringRef QXmlStreamAttribute::name() const
+/*! \fn QStringView QXmlStreamAttribute::name() const
Returns the attribute's local name.
*/
-/*! \fn QStringRef QXmlStreamAttribute::qualifiedName() const
+/*! \fn QStringView QXmlStreamAttribute::qualifiedName() const
Returns the attribute's qualified name.
A qualified name is the raw name of an attribute in the XML
@@ -2337,7 +2333,7 @@ QXmlStreamAttribute::QXmlStreamAttribute(const QString &qualifiedName, const QSt
the attribute's local name().
*/
/*!
- \fn QStringRef QXmlStreamAttribute::prefix() const
+ \fn QStringView QXmlStreamAttribute::prefix() const
\since 4.4
Returns the attribute's namespace prefix.
@@ -2345,7 +2341,7 @@ QXmlStreamAttribute::QXmlStreamAttribute(const QString &qualifiedName, const QSt
*/
-/*! \fn QStringRef QXmlStreamAttribute::value() const
+/*! \fn QStringView QXmlStreamAttribute::value() const
Returns the attribute's value.
*/
@@ -2421,15 +2417,15 @@ QXmlStreamNotationDeclaration::QXmlStreamNotationDeclaration()
{
}
-/*! \fn QStringRef QXmlStreamNotationDeclaration::name() const
+/*! \fn QStringView QXmlStreamNotationDeclaration::name() const
Returns the notation name.
*/
-/*! \fn QStringRef QXmlStreamNotationDeclaration::systemId() const
+/*! \fn QStringView QXmlStreamNotationDeclaration::systemId() const
Returns the system identifier.
*/
-/*! \fn QStringRef QXmlStreamNotationDeclaration::publicId() const
+/*! \fn QStringView QXmlStreamNotationDeclaration::publicId() const
Returns the public identifier.
*/
@@ -2492,11 +2488,11 @@ QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration(const QString &pr
m_namespaceUri = namespaceUri;
}
-/*! \fn QStringRef QXmlStreamNamespaceDeclaration::prefix() const
+/*! \fn QStringView QXmlStreamNamespaceDeclaration::prefix() const
Returns the prefix.
*/
-/*! \fn QStringRef QXmlStreamNamespaceDeclaration::namespaceUri() const
+/*! \fn QStringView QXmlStreamNamespaceDeclaration::namespaceUri() const
Returns the namespaceUri.
*/
@@ -2545,23 +2541,23 @@ QXmlStreamEntityDeclaration::QXmlStreamEntityDeclaration()
This function is very fast and never fails.
*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::name() const
+/*! \fn QStringView QXmlStreamEntityDeclaration::name() const
Returns the entity name.
*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::notationName() const
+/*! \fn QStringView QXmlStreamEntityDeclaration::notationName() const
Returns the notation name.
*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::systemId() const
+/*! \fn QStringView QXmlStreamEntityDeclaration::systemId() const
Returns the system identifier.
*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::publicId() const
+/*! \fn QStringView QXmlStreamEntityDeclaration::publicId() const
Returns the public identifier.
*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::value() const
+/*! \fn QStringView QXmlStreamEntityDeclaration::value() const
Returns the entity's value.
*/
@@ -2581,13 +2577,13 @@ Returns the entity's value.
described with \a namespaceUri, or an empty string reference if the
attribute is not defined. The \a namespaceUri can be empty.
*/
-QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, const QString &name) const
+QStringView QXmlStreamAttributes::value(const QString &namespaceUri, const QString &name) const
{
for (const QXmlStreamAttribute &attribute : *this) {
if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
return attribute.value();
}
- return QStringRef();
+ return QStringView();
}
/*!\overload
@@ -2595,13 +2591,13 @@ QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, const QStrin
described with \a namespaceUri, or an empty string reference if the
attribute is not defined. The \a namespaceUri can be empty.
*/
-QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1String name) const
+QStringView QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1String name) const
{
for (const QXmlStreamAttribute &attribute : *this) {
if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
return attribute.value();
}
- return QStringRef();
+ return QStringView();
}
/*!\overload
@@ -2609,13 +2605,13 @@ QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1Strin
described with \a namespaceUri, or an empty string reference if the
attribute is not defined. The \a namespaceUri can be empty.
*/
-QStringRef QXmlStreamAttributes::value(QLatin1String namespaceUri, QLatin1String name) const
+QStringView QXmlStreamAttributes::value(QLatin1String namespaceUri, QLatin1String name) const
{
for (const QXmlStreamAttribute &attribute : *this) {
if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
return attribute.value();
}
- return QStringRef();
+ return QStringView();
}
/*!\overload
@@ -2630,13 +2626,13 @@ QStringRef QXmlStreamAttributes::value(QLatin1String namespaceUri, QLatin1String
use qualified names, but a resolved namespaceUri and the attribute's
local name.
*/
-QStringRef QXmlStreamAttributes::value(const QString &qualifiedName) const
+QStringView QXmlStreamAttributes::value(const QString &qualifiedName) const
{
for (const QXmlStreamAttribute &attribute : *this) {
if (attribute.qualifiedName() == qualifiedName)
return attribute.value();
}
- return QStringRef();
+ return QStringView();
}
/*!\overload
@@ -2651,13 +2647,13 @@ QStringRef QXmlStreamAttributes::value(const QString &qualifiedName) const
use qualified names, but a resolved namespaceUri and the attribute's
local name.
*/
-QStringRef QXmlStreamAttributes::value(QLatin1String qualifiedName) const
+QStringView QXmlStreamAttributes::value(QLatin1String qualifiedName) const
{
for (const QXmlStreamAttribute &attribute : *this) {
if (attribute.qualifiedName() == qualifiedName)
return attribute.value();
}
- return QStringRef();
+ return QStringView();
}
/*!Appends a new attribute with \a name in the namespace
@@ -2754,12 +2750,12 @@ bool QXmlStreamReader::isStandaloneDocument() const
version string as specified in the XML declaration.
Otherwise an empty string is returned.
*/
-QStringRef QXmlStreamReader::documentVersion() const
+QStringView QXmlStreamReader::documentVersion() const
{
Q_D(const QXmlStreamReader);
if (d->type == QXmlStreamReader::StartDocument)
return d->documentVersion;
- return QStringRef();
+ return QStringView();
}
/*!
@@ -2769,12 +2765,12 @@ QStringRef QXmlStreamReader::documentVersion() const
encoding string as specified in the XML declaration.
Otherwise an empty string is returned.
*/
-QStringRef QXmlStreamReader::documentEncoding() const
+QStringView QXmlStreamReader::documentEncoding() const
{
Q_D(const QXmlStreamReader);
if (d->type == QXmlStreamReader::StartDocument)
return d->documentEncoding;
- return QStringRef();
+ return QStringView();
}
#endif // QT_NO_XMLSTREAMREADER
diff --git a/src/corelib/serialization/qxmlstream.h b/src/corelib/serialization/qxmlstream.h
index 31c605c981..ba495b64f0 100644
--- a/src/corelib/serialization/qxmlstream.h
+++ b/src/corelib/serialization/qxmlstream.h
@@ -70,9 +70,11 @@ public:
inline void clear() { m_string.clear(); m_position = m_size = 0; }
inline operator QStringRef() const { return QStringRef(&m_string, m_position, m_size); }
+ inline operator QStringView() const { return QStringView(m_string.constData() + m_position, m_size); }
inline const QString *string() const { return &m_string; }
inline int position() const { return m_position; }
inline int size() const { return m_size; }
+ inline QString toString() const { return QString(m_string.constData() + m_position, m_size); }
};
Q_DECLARE_SHARED(QXmlStreamStringRef)
@@ -89,15 +91,14 @@ public:
QXmlStreamAttribute(const QString &qualifiedName, const QString &value);
QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value);
- inline QStringRef namespaceUri() const { return m_namespaceUri; }
- inline QStringRef name() const { return m_name; }
- inline QStringRef qualifiedName() const { return m_qualifiedName; }
- inline QStringRef prefix() const {
- return QStringRef(m_qualifiedName.string(),
- m_qualifiedName.position(),
+ inline QStringView namespaceUri() const { return m_namespaceUri; }
+ inline QStringView name() const { return m_name; }
+ inline QStringView qualifiedName() const { return m_qualifiedName; }
+ inline QStringView prefix() const {
+ return QStringView(m_qualifiedName.string()->constData() + m_qualifiedName.position(),
qMax(0, m_qualifiedName.size() - m_name.size() - 1));
}
- inline QStringRef value() const { return m_value; }
+ inline QStringView value() const { return m_value; }
inline bool isDefault() const { return m_isDefault; }
inline bool operator==(const QXmlStreamAttribute &other) const {
return (value() == other.value()
@@ -116,11 +117,11 @@ class QXmlStreamAttributes : public QList<QXmlStreamAttribute>
{
public:
inline QXmlStreamAttributes() {}
- Q_CORE_EXPORT QStringRef value(const QString &namespaceUri, const QString &name) const;
- Q_CORE_EXPORT QStringRef value(const QString &namespaceUri, QLatin1String name) const;
- Q_CORE_EXPORT QStringRef value(QLatin1String namespaceUri, QLatin1String name) const;
- Q_CORE_EXPORT QStringRef value(const QString &qualifiedName) const;
- Q_CORE_EXPORT QStringRef value(QLatin1String qualifiedName) const;
+ Q_CORE_EXPORT QStringView value(const QString &namespaceUri, const QString &name) const;
+ Q_CORE_EXPORT QStringView value(const QString &namespaceUri, QLatin1String name) const;
+ Q_CORE_EXPORT QStringView value(QLatin1String namespaceUri, QLatin1String name) const;
+ Q_CORE_EXPORT QStringView value(const QString &qualifiedName) const;
+ Q_CORE_EXPORT QStringView value(QLatin1String qualifiedName) const;
Q_CORE_EXPORT void append(const QString &namespaceUri, const QString &name, const QString &value);
Q_CORE_EXPORT void append(const QString &qualifiedName, const QString &value);
@@ -150,8 +151,8 @@ public:
QXmlStreamNamespaceDeclaration();
QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri);
- inline QStringRef prefix() const { return m_prefix; }
- inline QStringRef namespaceUri() const { return m_namespaceUri; }
+ inline QStringView prefix() const { return m_prefix; }
+ inline QStringView namespaceUri() const { return m_namespaceUri; }
inline bool operator==(const QXmlStreamNamespaceDeclaration &other) const {
return (prefix() == other.prefix() && namespaceUri() == other.namespaceUri());
}
@@ -169,9 +170,9 @@ class Q_CORE_EXPORT QXmlStreamNotationDeclaration {
public:
QXmlStreamNotationDeclaration();
- inline QStringRef name() const { return m_name; }
- inline QStringRef systemId() const { return m_systemId; }
- inline QStringRef publicId() const { return m_publicId; }
+ inline QStringView name() const { return m_name; }
+ inline QStringView systemId() const { return m_systemId; }
+ inline QStringView publicId() const { return m_publicId; }
inline bool operator==(const QXmlStreamNotationDeclaration &other) const {
return (name() == other.name() && systemId() == other.systemId()
&& publicId() == other.publicId());
@@ -190,11 +191,11 @@ class Q_CORE_EXPORT QXmlStreamEntityDeclaration {
public:
QXmlStreamEntityDeclaration();
- inline QStringRef name() const { return m_name; }
- inline QStringRef notationName() const { return m_notationName; }
- inline QStringRef systemId() const { return m_systemId; }
- inline QStringRef publicId() const { return m_publicId; }
- inline QStringRef value() const { return m_value; }
+ inline QStringView name() const { return m_name; }
+ inline QStringView notationName() const { return m_notationName; }
+ inline QStringView systemId() const { return m_systemId; }
+ inline QStringView publicId() const { return m_publicId; }
+ inline QStringView value() const { return m_value; }
inline bool operator==(const QXmlStreamEntityDeclaration &other) const {
return (name() == other.name()
&& notationName() == other.notationName()
@@ -276,8 +277,8 @@ public:
inline bool isProcessingInstruction() const { return tokenType() == ProcessingInstruction; }
bool isStandaloneDocument() const;
- QStringRef documentVersion() const;
- QStringRef documentEncoding() const;
+ QStringView documentVersion() const;
+ QStringView documentEncoding() const;
qint64 lineNumber() const;
qint64 columnNumber() const;
@@ -292,24 +293,24 @@ public:
};
QString readElementText(ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement);
- QStringRef name() const;
- QStringRef namespaceUri() const;
- QStringRef qualifiedName() const;
- QStringRef prefix() const;
+ QStringView name() const;
+ QStringView namespaceUri() const;
+ QStringView qualifiedName() const;
+ QStringView prefix() const;
- QStringRef processingInstructionTarget() const;
- QStringRef processingInstructionData() const;
+ QStringView processingInstructionTarget() const;
+ QStringView processingInstructionData() const;
- QStringRef text() const;
+ QStringView text() const;
QXmlStreamNamespaceDeclarations namespaceDeclarations() const;
void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction);
void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions);
QXmlStreamNotationDeclarations notationDeclarations() const;
QXmlStreamEntityDeclarations entityDeclarations() const;
- QStringRef dtdName() const;
- QStringRef dtdPublicId() const;
- QStringRef dtdSystemId() const;
+ QStringView dtdName() const;
+ QStringView dtdPublicId() const;
+ QStringView dtdSystemId() const;
int entityExpansionLimit() const;
void setEntityExpansionLimit(int limit);
diff --git a/src/tools/qvkgen/qvkgen.cpp b/src/tools/qvkgen/qvkgen.cpp
index efbe54e0a5..0664f6f5db 100644
--- a/src/tools/qvkgen/qvkgen.cpp
+++ b/src/tools/qvkgen/qvkgen.cpp
@@ -104,7 +104,7 @@ void VkSpecParser::parseCommands()
m_reader.readNext();
if (m_reader.isEndElement() && m_reader.name() == QStringLiteral("commands"))
return;
- if (m_reader.isStartElement() && m_reader.name() == "command")
+ if (m_reader.isStartElement() && m_reader.name() == u"command")
m_commands.append(parseCommand());
}
}
@@ -162,7 +162,7 @@ VkSpecParser::TypedName VkSpecParser::parseParamOrProto(const QString &tag)
skip();
}
} else {
- QStringRef text = m_reader.text().trimmed();
+ auto text = m_reader.text().trimmed();
if (!text.isEmpty()) {
if (text.startsWith(QLatin1Char('['))) {
t.typeSuffix += text;
diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp
index 5b2a602e5f..3601280144 100644
--- a/src/tools/uic/uic.cpp
+++ b/src/tools/uic/uic.cpp
@@ -172,7 +172,7 @@ static double versionFromUiAttribute(QXmlStreamReader &reader)
const QString versionAttribute = QLatin1String("version");
if (!attributes.hasAttribute(versionAttribute))
return 4.0;
- const QStringRef version = attributes.value(versionAttribute);
+ const QStringView version = attributes.value(versionAttribute);
return version.toDouble();
}
diff --git a/src/xml/dom/qdomhelpers.cpp b/src/xml/dom/qdomhelpers.cpp
index 7a9ae1a46c..69fb99715d 100644
--- a/src/xml/dom/qdomhelpers.cpp
+++ b/src/xml/dom/qdomhelpers.cpp
@@ -291,15 +291,6 @@ QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(5, 15)
-inline QString stringRefToString(const QStringRef &stringRef)
-{
- // Calling QStringRef::toString() on a NULL QStringRef in some cases returns
- // an empty string (i.e. QString("")) instead of a NULL string (i.e. QString()).
- // QDom implementation differentiates between NULL and empty strings, so
- // we need this as workaround to keep the current behavior unchanged.
- return stringRef.isNull() ? QString() : stringRef.toString();
-}
-
bool QDomBuilder::startElement(const QString &nsURI, const QString &qName,
const QXmlStreamAttributes &atts)
{
@@ -317,12 +308,12 @@ bool QDomBuilder::startElement(const QString &nsURI, const QString &qName,
for (const auto &attr : atts) {
auto domElement = static_cast<QDomElementPrivate *>(node);
if (nsProcessing) {
- domElement->setAttributeNS(stringRefToString(attr.namespaceUri()),
- stringRefToString(attr.qualifiedName()),
- stringRefToString(attr.value()));
+ domElement->setAttributeNS(attr.namespaceUri().toString(),
+ attr.qualifiedName().toString(),
+ attr.value().toString());
} else {
- domElement->setAttribute(stringRefToString(attr.qualifiedName()),
- stringRefToString(attr.value()));
+ domElement->setAttribute(attr.qualifiedName().toString(),
+ attr.value().toString());
}
}
@@ -513,9 +504,9 @@ bool QDomParser::parseProlog()
}
foundDtd = true;
- if (!domBuilder.startDTD(stringRefToString(reader->dtdName()),
- stringRefToString(reader->dtdPublicId()),
- stringRefToString(reader->dtdSystemId()))) {
+ if (!domBuilder.startDTD(reader->dtdName().toString(),
+ reader->dtdPublicId().toString(),
+ reader->dtdSystemId().toString())) {
domBuilder.fatalError(
QDomParser::tr("Error occurred while processing document type declaration"));
return false;
@@ -550,13 +541,13 @@ bool QDomParser::parseBody()
{
Q_ASSERT(reader);
- std::stack<QStringRef> tagStack;
+ std::stack<QString> tagStack;
while (!reader->atEnd() && !reader->hasError()) {
switch (reader->tokenType()) {
case QXmlStreamReader::StartElement:
- tagStack.push(reader->qualifiedName());
- if (!domBuilder.startElement(stringRefToString(reader->namespaceUri()),
- stringRefToString(reader->qualifiedName()),
+ tagStack.push(reader->qualifiedName().toString());
+ if (!domBuilder.startElement(reader->namespaceUri().toString(),
+ reader->qualifiedName().toString(),
reader->attributes())) {
domBuilder.fatalError(
QDomParser::tr("Error occurred while processing a start element"));
@@ -641,10 +632,10 @@ bool QDomParser::parseMarkupDecl()
// parsed result. So we don't need to do anything for the Internal Entities.
if (!entityDecl.publicId().isEmpty() || !entityDecl.systemId().isEmpty()) {
// External Entity
- if (!domBuilder.unparsedEntityDecl(stringRefToString(entityDecl.name()),
- stringRefToString(entityDecl.publicId()),
- stringRefToString(entityDecl.systemId()),
- stringRefToString(entityDecl.notationName()))) {
+ if (!domBuilder.unparsedEntityDecl(entityDecl.name().toString(),
+ entityDecl.publicId().toString(),
+ entityDecl.systemId().toString(),
+ entityDecl.notationName().toString())) {
domBuilder.fatalError(
QDomParser::tr("Error occurred while processing entity declaration"));
return false;
@@ -654,9 +645,9 @@ bool QDomParser::parseMarkupDecl()
const auto notations = reader->notationDeclarations();
for (const auto &notationDecl : notations) {
- if (!domBuilder.notationDecl(stringRefToString(notationDecl.name()),
- stringRefToString(notationDecl.publicId()),
- stringRefToString(notationDecl.systemId()))) {
+ if (!domBuilder.notationDecl(notationDecl.name().toString(),
+ notationDecl.publicId().toString(),
+ notationDecl.systemId().toString())) {
domBuilder.fatalError(
QDomParser::tr("Error occurred while processing notation declaration"));
return false;