From f00999d61d69107b5f778154c06c35acc46c64b9 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Sat, 26 Apr 2025 17:07:57 +0200 Subject: [PATCH] QmlDesigner: Refactor code to use QStringView for improved performance - Updated `isSignalPropertyName` to use `QStringView` instead of `QString`. - Enhanced `fileForFullQrcPath` and `removeFileFromQrcPath` functions to use `QStringView` for better efficiency. - Improved handling of signal names and file paths using modern C++ ranges and views. Change-Id: I09725edba2ef1115cda1997cdeebc19f87ccb0ba Reviewed-by: Burak Hancerli Reviewed-by: Thomas Hartmann --- .../rewriter/texttomodelmerger.cpp | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp index f9f56923378..0d0a3d6bc52 100644 --- a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp @@ -210,14 +210,14 @@ QString fixEscapedUnicodeChar(const QString &value) //convert "\u2939" return value; } -bool isSignalPropertyName(const QString &signalName) +bool isSignalPropertyName(QStringView signalName) { if (signalName.isEmpty()) return false; // see QmlCompiler::isSignalPropertyName - QStringList list = signalName.split(QLatin1String(".")); + auto begin = std::ranges::find(signalName | std::views::reverse, u'.').base(); - const QString &pureSignalName = list.constLast(); + QStringView pureSignalName = {begin, signalName.end()}; return pureSignalName.length() >= 3 && pureSignalName.startsWith(u"on") && pureSignalName.at(2).isLetter(); } @@ -1626,23 +1626,24 @@ void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty, } } -static QString fileForFullQrcPath(const QString &string) +static QString fileForFullQrcPath(QStringView string) { - QStringList stringList = string.split(QLatin1String("/")); - if (stringList.isEmpty()) - return QString(); + auto found = std::ranges::find(string | std::views::reverse, u'/'); - return stringList.constLast(); + if (found == string.rend()) + return {}; + + return QStringView{found.base(), string.end()}.toString(); } -static QString removeFileFromQrcPath(const QString &string) +static QString removeFileFromQrcPath(const QStringView string) { - QStringList stringList = string.split(QLatin1String("/")); - if (stringList.isEmpty()) - return QString(); + auto found = std::ranges::find(string | std::views::reverse, u'/'); - stringList.removeLast(); - return stringList.join(QLatin1String("/")); + if (found == string.rend()) + return {}; + + return QStringView{string.begin(), std::prev(found.base())}.toString(); } void TextToModelMerger::syncVariantProperty(AbstractProperty &modelProperty,