aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qmlcompiler/qqmljsutils.cpp24
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/Main.qml6
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/TestApp/somesubfolder/anothersubfolder/MyModule/MyItem.qml3
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/qmake_testapp.qrc5
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/.qt/rcc/testapp_raw_qml_0.qrc5
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/Main.qml6
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/TestApp/qmldir3
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/MyModule_raw_qml_0.qrc5
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/.qt/rcc/qmake_MyModule.qrc5
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/MyItem.qml3
-rw-r--r--tests/auto/qmlls/utils/data/findDefinition/TestAppWithBuildFolder/build/somesubfolder/anothersubfolder/MyModule/qmldir4
-rw-r--r--tests/auto/qmlls/utils/tst_qmlls_utils.cpp24
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);