diff options
author | Marco Bubke <marco.bubke@qt.io> | 2022-02-10 17:56:35 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2022-02-15 17:18:59 +0000 |
commit | bdc6df0c41e8251d5fcd19a22463189d11ee4768 (patch) | |
tree | 90b81455110fd41bc398c7732756bc8430ad78a7 | |
parent | 04451df763b558af903cc7b822baa538a94f0a16 (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.cpp | 5 | ||||
-rw-r--r-- | tests/unit/unittest/qmldocumentparser-test.cpp | 32 |
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"); |