diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp index 664bd8f0776..796f8a99777 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp @@ -218,6 +218,9 @@ Storage::PropertyDeclarations createProperties( propertyDeclarations.reserve(Utils::usize(qmlProperties)); for (const QQmlJSMetaProperty &qmlProperty : qmlProperties) { + if (qmlProperty.typeName().isEmpty()) + continue; + Utils::SmallString propertyTypeName{ fullyQualifiedTypeName(qmlProperty.typeName(), componentNameWithoutNamespace)}; diff --git a/tests/unit/unittest/qmltypesparser-test.cpp b/tests/unit/unittest/qmltypesparser-test.cpp index 521019429cb..9169d6b29ab 100644 --- a/tests/unit/unittest/qmltypesparser-test.cpp +++ b/tests/unit/unittest/qmltypesparser-test.cpp @@ -304,6 +304,26 @@ TEST_F(QmlTypesParser, PropertiesWithQualifiedTypes) Storage::PropertyDeclarationTraits::None))))); } +TEST_F(QmlTypesParser, PropertiesWithoutType) +{ + QString source{R"(import QtQuick.tooling 1.2 + Module{ + Component { name: "QObject" + Property { name: "objectName"} + Property { name: "target"; type: "QObject"; isPointer: true } + }})"}; + + parser.parse(source, imports, types, projectData); + + ASSERT_THAT(types, + ElementsAre( + Field(&Storage::Type::propertyDeclarations, + UnorderedElementsAre( + IsPropertyDeclaration("target", + Storage::ImportedType{"QObject"}, + Storage::PropertyDeclarationTraits::IsPointer))))); +} + TEST_F(QmlTypesParser, Functions) { QString source{R"(import QtQuick.tooling 1.2