From dfcc4a0885fbd046010d33a243c7f6155eefbf28 Mon Sep 17 00:00:00 2001 From: Sami Shalayel Date: Fri, 25 Sep 2026 14:41:45 +0200 Subject: QQmlJSUtils: find build paths of renamed files Follow the alias in the qrc to also find renamed files. Fixes: QTBUG-150919 Pick-to: 6.12 6.11 Change-Id: I7e8da3beefeefe732c2ad92b74a58e88d794777e Reviewed-by: Fabian Kosmale Reviewed-by: Ulf Hermann --- src/qmlcompiler/qqmljsutils.cpp | 4 +--- .../mymodule-build-renamed-in-rcc/.qt/rcc/app_raw_qml_0.qrc | 6 ++++++ .../data/mymodule-build-renamed-in-rcc/.qt/rcc/qmake_app.qrc | 5 +++++ .../data/mymodule-build-renamed-in-rcc/MyModule/qmldir | 4 ++++ tests/auto/qml/qqmljsutils/tst_qqmljsutils.cpp | 11 +++++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/app_raw_qml_0.qrc create mode 100644 tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/qmake_app.qrc create mode 100644 tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/MyModule/qmldir diff --git a/src/qmlcompiler/qqmljsutils.cpp b/src/qmlcompiler/qqmljsutils.cpp index dcd18560e5..7fc31e9524 100644 --- a/src/qmlcompiler/qqmljsutils.cpp +++ b/src/qmlcompiler/qqmljsutils.cpp @@ -359,9 +359,7 @@ QString qmlBuildPathFromSourcePath(const QQmlJSResourceFileMapper *mapper, if (!moduleBuildEntry.isValid()) continue; - const auto qrcFolderPath = qrcPath.first(qrcPath.lastIndexOf(u'/')); - return moduleBuildEntry.filePath + qrcFolderPath.sliced(moduleBuildEntry.resourcePath.size()) - + pathInSourceFolder.sliced(pathInSourceFolder.lastIndexOf(u'/')); + return moduleBuildEntry.filePath + qrcPath.sliced(moduleBuildEntry.resourcePath.size()); } return pathInSourceFolder; diff --git a/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/app_raw_qml_0.qrc b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/app_raw_qml_0.qrc new file mode 100644 index 0000000000..23e5b161a1 --- /dev/null +++ b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/app_raw_qml_0.qrc @@ -0,0 +1,6 @@ + + + ../../../mymodule-source/MyModule/Main.qml + ../../../mymodule-source/MyModule/X/Y/Z/MyComponent.qml + + diff --git a/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/qmake_app.qrc b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/qmake_app.qrc new file mode 100644 index 0000000000..22e7a3356d --- /dev/null +++ b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/.qt/rcc/qmake_app.qrc @@ -0,0 +1,5 @@ + + + ../../MyModule/qmldir + + diff --git a/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/MyModule/qmldir b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/MyModule/qmldir new file mode 100644 index 0000000000..4660971aa3 --- /dev/null +++ b/tests/auto/qml/qqmljsutils/data/mymodule-build-renamed-in-rcc/MyModule/qmldir @@ -0,0 +1,4 @@ +module MyModule +prefer :/qt/qml/MyModule/ +Main 254.0 Renamed.qml +MyComponent 254.0 X/Y/Z/RenamedComponent.qml diff --git a/tests/auto/qml/qqmljsutils/tst_qqmljsutils.cpp b/tests/auto/qml/qqmljsutils/tst_qqmljsutils.cpp index d5e986c611..c258f52a53 100644 --- a/tests/auto/qml/qqmljsutils/tst_qqmljsutils.cpp +++ b/tests/auto/qml/qqmljsutils/tst_qqmljsutils.cpp @@ -31,6 +31,17 @@ void tst_qqmljsutils::qmlFileSourcePathFromBuildPath_data() << testFile(u"mymodule-build-without-qmldir-prefer"_s) << testFile(u"mymodule-build-without-qmldir-prefer/MyModule/X/Y/Z/MyComponent.qml"_s) << testFile(u"mymodule-source/MyModule/X/Y/Z/MyComponent.qml"_s); + + // The alias in the qrc may rename the file: the build path has to follow the alias instead of + // reusing the file name of the source file. + QTest::addRow("RenamedInRcc") + << testFile(u"mymodule-build-renamed-in-rcc"_s) + << testFile(u"mymodule-build-renamed-in-rcc/MyModule/Renamed.qml"_s) + << testFile(u"mymodule-source/MyModule/Main.qml"_s); + QTest::addRow("NestedRenamedInRcc") + << testFile(u"mymodule-build-renamed-in-rcc"_s) + << testFile(u"mymodule-build-renamed-in-rcc/MyModule/X/Y/Z/RenamedComponent.qml"_s) + << testFile(u"mymodule-source/MyModule/X/Y/Z/MyComponent.qml"_s); } void tst_qqmljsutils::qmlFileSourcePathFromBuildPath() -- cgit v1.2.3