diff options
-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"); |