diff options
12 files changed, 67 insertions, 26 deletions
diff --git a/src/qmlcompiler/qqmljsutils.cpp b/src/qmlcompiler/qqmljsutils.cpp index 2fc0564edc..ad8a14944f 100644 --- a/src/qmlcompiler/qqmljsutils.cpp +++ b/src/qmlcompiler/qqmljsutils.cpp @@ -248,30 +248,14 @@ bool canCompareWithQUrl( return lhsType == typeResolver->urlType() && rhsType == typeResolver->urlType(); } -static QVarLengthArray<QString, 2> resourceFoldersFromBuildFolder(const QString &buildFolder) -{ - QVarLengthArray<QString, 2> result; - const QDir dir(buildFolder); - if (dir.exists(u".rcc"_s)) { - result.append(dir.filePath(u".rcc"_s)); - } - if (dir.exists(u".qt/rcc"_s)) { - result.append(dir.filePath(u".qt/rcc"_s)); - } - return result; -} - - QStringList QQmlJSUtils::resourceFilesFromBuildFolders(const QStringList &buildFolders) { QStringList result; for (const QString &path : buildFolders) { - for (const QString &resourceFolder : resourceFoldersFromBuildFolder(path)) { - QDirIterator it(resourceFolder, QStringList{ u"*.qrc"_s }, QDir::Files, - QDirIterator::Subdirectories); - while (it.hasNext()) { - result.append(it.next()); - } + QDirIterator it(path, QStringList{ u"*.qrc"_s }, QDir::Files | QDir::Hidden, + QDirIterator::Subdirectories); + while (it.hasNext()) { + result.append(it.next()); } } return result; diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/Main.qml b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/Main.qml new file mode 100644 index 0000000000..dd96763569 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/Main.qml @@ -0,0 +1,6 @@ +import QtQuick +import MyModule + +Item { + MyItem {} +} diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml new file mode 100644 index 0000000000..3052615aef --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml @@ -0,0 +1,3 @@ +import QtQuick + +Item {} diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/qmake_testapp.qrc b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/qmake_testapp.qrc new file mode 100644 index 0000000000..def147c016 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/qmake_testapp.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/TestApp"> + <file alias="qmldir">../../TestApp/qmldir</file> + </qresource> +</RCC> diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/testapp_raw_qml_0.qrc b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/testapp_raw_qml_0.qrc new file mode 100644 index 0000000000..a5fb4a1973 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/testapp_raw_qml_0.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/TestApp/"> + <file alias="Main.qml">../../../TestApp/Main.qml</file> + </qresource> +</RCC> diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/Main.qml b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/Main.qml new file mode 100644 index 0000000000..dd96763569 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/Main.qml @@ -0,0 +1,6 @@ +import QtQuick +import MyModule + +Item { + MyItem {} +} diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/qmldir b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/qmldir new file mode 100644 index 0000000000..e256072077 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/qmldir @@ -0,0 +1,3 @@ +module testapp +prefer :/testapp/ +Main 1.0 Main.qml diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/MyModule_raw_qml_0.qrc b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/MyModule_raw_qml_0.qrc new file mode 100644 index 0000000000..01307e1549 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/MyModule_raw_qml_0.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/MyModule/"> + <file alias="MyItem.qml">../../../../../../TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml</file> + </qresource> +</RCC> diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/qmake_MyModule.qrc b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/qmake_MyModule.qrc new file mode 100644 index 0000000000..3454fb1120 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/qmake_MyModule.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/MyModule"> + <file alias="qmldir">../../qmldir</file> + </qresource> +</RCC> diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/MyItem.qml b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/MyItem.qml new file mode 100644 index 0000000000..3052615aef --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/MyItem.qml @@ -0,0 +1,3 @@ +import QtQuick + +Item {} diff --git a/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/qmldir b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/qmldir new file mode 100644 index 0000000000..00d7d2d118 --- /dev/null +++ b/tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/qmldir @@ -0,0 +1,4 @@ +module MyModule +typeinfo MyModule.qmltypes +prefer :/MyModule/ +MyItem 254.0 MyItem.qml diff --git a/tests/auto/qmlls/utils/tst_qmlls_utils.cpp b/tests/auto/qmlls/utils/tst_qmlls_utils.cpp index a51d7a23b6..df45256008 100644 --- a/tests/auto/qmlls/utils/tst_qmlls_utils.cpp +++ b/tests/auto/qmlls/utils/tst_qmlls_utils.cpp @@ -1819,11 +1819,11 @@ void tst_qmlls_utils::findDefinitionFromLocation_data() QTest::addColumn<int>("expectedLine"); QTest::addColumn<int>("expectedCharacter"); QTest::addColumn<size_t>("expectedLength"); - QTest::addColumn<QString>("extraBuildDir"); + QTest::addColumn<QStringList>("extraBuildDirs"); const QString JSDefinitionsQml = testFile(u"JSDefinitions.qml"_s); const QString BaseTypeQml = testFile(u"BaseType.qml"_s); - const QString noExtraBuildDir; + const QStringList noExtraBuildDir; QTest::addRow("JSIdentifierX") << JSDefinitionsQml << 14 << 11 << JSDefinitionsQml << 13 << 13 << strlen("x") << noExtraBuildDir; @@ -1959,10 +1959,22 @@ void tst_qmlls_utils::findDefinitionFromLocation_data() const QString myComponentQml = testFile(u"findDefinition/mymodule-source/MyModule/X/Y/Z/MyComponent.qml"_s); QTest::addRow("nestedFromOwnModule") << mainQml << 4 << 5 << myComponentQml << 3 << 1 - << strlen("Item") << testFile(u"findDefinition/mymodule-build"_s); + << strlen("Item") << QStringList { testFile(u"findDefinition/mymodule-build"_s) }; QTest::addRow("nestedFromOwnModuleWithoutQmldirPrefer") << mainQml << 4 << 5 << myComponentQml << 3 << 1 << strlen("Item") - << testFile(u"findDefinition/mymodule-build-without-qmldir-prefer"_s); + << QStringList { testFile(u"findDefinition/mymodule-build-without-qmldir-prefer"_s) }; + } + + { + const QString mainQml = testFile(u"findDefinition/TestAppWithBuildFolder/TestApp/Main.qml"_s); + const QString myComponentQml = testFile(u"findDefinition/TestAppWithBuildFolder/TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml"_s); + QTest::addRow("componentFromOtherModule") + << mainQml << 5 << 8 << myComponentQml << 3 << 1 << strlen("Item") + << QStringList{ + testFile(u"findDefinition/TestAppWithBuildFolder/build"_s), + testFile( + u"findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder"_s) + }; } } @@ -1975,7 +1987,7 @@ void tst_qmlls_utils::findDefinitionFromLocation() QFETCH(int, expectedLine); QFETCH(int, expectedCharacter); QFETCH(size_t, expectedLength); - QFETCH(QString, extraBuildDir); + QFETCH(QStringList, extraBuildDirs); if (expectedLine == -1) expectedLine = line; @@ -1988,7 +2000,7 @@ void tst_qmlls_utils::findDefinitionFromLocation() Q_ASSERT(expectedLine > 0); Q_ASSERT(expectedCharacter > 0); - auto [env, file] = createEnvironmentAndLoadFile(filePath, QStringList { extraBuildDir }); + auto [env, file] = createEnvironmentAndLoadFile(filePath, extraBuildDirs); auto locations = QQmlLSUtils::itemsFromTextLocation( file.field(QQmlJS::Dom::Fields::currentItem), line - 1, character - 1); |
