aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2022-02-10 17:56:35 +0100
committerMarco Bubke <marco.bubke@qt.io>2022-02-15 17:18:59 +0000
commitbdc6df0c41e8251d5fcd19a22463189d11ee4768 (patch)
tree90b81455110fd41bc398c7732756bc8430ad78a7
parent04451df763b558af903cc7b822baa538a94f0a16 (diff)
QmlDesigner: Improve enumeration support in the qml document parser
An enumeration like a qualified type contains a '.' too. So this has to be differentiated. Task-number: QDS-6191 Change-Id: If094abaaa29c5a0079a3c3855534d9b53b2bc94d Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp5
-rw-r--r--tests/unit/unittest/qmldocumentparser-test.cpp32
2 files changed, 35 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
index b553c7a154..b0d9496861 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/qmldocumentparser.cpp
@@ -120,15 +120,16 @@ void addImports(Storage::Imports &imports,
Storage::ImportedTypeName createImportedTypeName(const QStringView rawtypeName,
const QualifiedImports &qualifiedImports)
{
- if (!rawtypeName.contains('.')) {
+ if (!rawtypeName.contains('.'))
return Storage::ImportedType{Utils::SmallString{rawtypeName}};
- }
auto foundDot = std::find(rawtypeName.begin(), rawtypeName.end(), '.');
QStringView alias(rawtypeName.begin(), foundDot);
auto foundImport = qualifiedImports.find(alias.toString());
+ if (foundImport == qualifiedImports.end())
+ return Storage::ImportedType{Utils::SmallString{rawtypeName}};
QStringView typeName(std::next(foundDot), rawtypeName.end());
diff --git a/tests/unit/unittest/qmldocumentparser-test.cpp b/tests/unit/unittest/qmldocumentparser-test.cpp
index 68a7395e44..e9fa41100b 100644
--- a/tests/unit/unittest/qmldocumentparser-test.cpp
+++ b/tests/unit/unittest/qmldocumentparser-test.cpp
@@ -187,6 +187,38 @@ TEST_F(QmlDocumentParser, QualifiedProperties)
Storage::PropertyDeclarationTraits::None)));
}
+TEST_F(QmlDocumentParser, EnumerationInProperties)
+{
+ auto type = parser.parse(R"(import Example 2.1 as Example
+ Item{ property Enumeration.Foo foo})",
+ imports,
+ qmlFileSourceId);
+
+ ASSERT_THAT(type.propertyDeclarations,
+ UnorderedElementsAre(IsPropertyDeclaration("foo",
+ Storage::ImportedType("Enumeration.Foo"),
+ Storage::PropertyDeclarationTraits::None)));
+}
+
+TEST_F(QmlDocumentParser, QualifiedEnumerationInProperties)
+{
+ auto exampleModuleId = storage.moduleId("Example");
+
+ auto type = parser.parse(R"(import Example 2.1 as Example
+ Item{ property Example.Enumeration.Foo foo})",
+ imports,
+ qmlFileSourceId);
+
+ ASSERT_THAT(type.propertyDeclarations,
+ UnorderedElementsAre(IsPropertyDeclaration(
+ "foo",
+ Storage::QualifiedImportedType("Enumeration.Foo",
+ Storage::Import{exampleModuleId,
+ Storage::Version{2, 1},
+ qmlFileSourceId}),
+ Storage::PropertyDeclarationTraits::None)));
+}
+
TEST_F(QmlDocumentParser, Imports)
{
ModuleId fooDirectoryModuleId = storage.moduleId("/path/foo");