From 8839b734204ce328c588725f941d66f747731d6c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 23 May 2025 12:59:57 +0200 Subject: [PATCH] QmlDesigner: Fix alias property QmlDocumentParser was using the wrong constructor. The property alias constructor is now explicit. Task-number: QDS-15387 Change-Id: I753cbc259b21129865db54926f77a07391224b77 Reviewed-by: Marco Bubke Reviewed-by: Thomas Hartmann --- .../projectstorage/projectstoragetypes.h | 4 ++-- .../projectstorage/qmldocumentparser.cpp | 1 + .../tests/printers/gtest-creator-printing.cpp | 17 ++++++++++++++++- .../projectstorage/qmldocumentparser-test.cpp | 18 ++++++++++++------ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h index cc7c2a33577..3bb6e738f47 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstoragetypes.h @@ -848,15 +848,15 @@ public: explicit PropertyDeclaration(::Utils::SmallStringView name, ImportedTypeName typeName, PropertyDeclarationTraits traits, + PropertyKind kind, ::Utils::SmallStringView aliasPropertyName, ::Utils::SmallStringView aliasPropertyNameTail = {}) : name{name} , typeName{std::move(typeName)} , aliasPropertyName{aliasPropertyName} , aliasPropertyNameTail{aliasPropertyNameTail} - , traits{traits} - , kind{PropertyKind::Property} + , kind{kind} {} explicit PropertyDeclaration(::Utils::SmallStringView name, diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/qmldocumentparser.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/qmldocumentparser.cpp index c043a393fb8..a5f632d3aaa 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/qmldocumentparser.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/qmldocumentparser.cpp @@ -240,6 +240,7 @@ void addPropertyDeclarations(Storage::Synchronization::Type &type, type.propertyDeclarations.emplace_back(Utils::SmallString{propertyDeclaration.name}, std::move(importedTypeName), traits, + Synchronization::PropertyKind::Alias, aliasPropertyName, aliasPropertyNameTail); } diff --git a/tests/unit/tests/printers/gtest-creator-printing.cpp b/tests/unit/tests/printers/gtest-creator-printing.cpp index 42fe86cd089..69ca7eae4c2 100644 --- a/tests/unit/tests/printers/gtest-creator-printing.cpp +++ b/tests/unit/tests/printers/gtest-creator-printing.cpp @@ -923,13 +923,28 @@ std::ostream &operator<<(std::ostream &out, const Type &type) << ",\n\t\t\tdefault: " << type.defaultPropertyName << "\n\t\t\t)"; } +std::ostream &operator<<(std::ostream &out, PropertyKind kind) + +{ + switch (kind) { + case PropertyKind::Property: + out << "Property"; + break; + case PropertyKind::Alias: + out << "Alias"; + break; + } + + return out; +} + std::ostream &operator<<(std::ostream &out, const PropertyDeclaration &propertyDeclaration) { using Utils::operator<<; return out << "(\"" << propertyDeclaration.name << "\", " << propertyDeclaration.typeName << ", " << propertyDeclaration.typeId << ", " << propertyDeclaration.traits << ", " << propertyDeclaration.propertyTypeId << ", \"" - << propertyDeclaration.aliasPropertyName << "\")"; + << propertyDeclaration.aliasPropertyName << "\", " << propertyDeclaration.kind << ")"; } std::ostream &operator<<(std::ostream &out, const FunctionDeclaration &functionDeclaration) diff --git a/tests/unit/tests/unittests/projectstorage/qmldocumentparser-test.cpp b/tests/unit/tests/unittests/projectstorage/qmldocumentparser-test.cpp index fb1df11c115..07f3c183826 100644 --- a/tests/unit/tests/unittests/projectstorage/qmldocumentparser-test.cpp +++ b/tests/unit/tests/unittests/projectstorage/qmldocumentparser-test.cpp @@ -50,8 +50,8 @@ MATCHER_P4(IsAliasPropertyDeclaration, traits, aliasPropertyName, std::string(negation ? "isn't " : "is ") - + PrintToString( - Synchronization::PropertyDeclaration{name, typeName, traits, aliasPropertyName})) + + PrintToString(Synchronization::PropertyDeclaration{ + name, typeName, traits, Synchronization::PropertyKind::Alias, aliasPropertyName, {}})) { const Synchronization::PropertyDeclaration &propertyDeclaration = arg; @@ -59,7 +59,8 @@ MATCHER_P4(IsAliasPropertyDeclaration, && Synchronization::ImportedTypeName{typeName} == propertyDeclaration.typeName && propertyDeclaration.traits == traits && propertyDeclaration.aliasPropertyName == aliasPropertyName - && propertyDeclaration.aliasPropertyNameTail.empty(); + && propertyDeclaration.aliasPropertyNameTail.empty() + && propertyDeclaration.kind == Synchronization::PropertyKind::Alias; } MATCHER_P5(IsAliasPropertyDeclaration, @@ -69,8 +70,12 @@ MATCHER_P5(IsAliasPropertyDeclaration, aliasPropertyName, aliasPropertyNameTail, std::string(negation ? "isn't " : "is ") - + PrintToString( - Synchronization::PropertyDeclaration{name, typeName, traits, aliasPropertyName})) + + PrintToString(Synchronization::PropertyDeclaration{name, + typeName, + traits, + Synchronization::PropertyKind::Alias, + aliasPropertyName, + aliasPropertyNameTail})) { const Synchronization::PropertyDeclaration &propertyDeclaration = arg; @@ -78,7 +83,8 @@ MATCHER_P5(IsAliasPropertyDeclaration, && Synchronization::ImportedTypeName{typeName} == propertyDeclaration.typeName && propertyDeclaration.traits == traits && propertyDeclaration.aliasPropertyName == aliasPropertyName - && propertyDeclaration.aliasPropertyNameTail == aliasPropertyNameTail; + && propertyDeclaration.aliasPropertyNameTail == aliasPropertyNameTail + && propertyDeclaration.kind == Synchronization::PropertyKind::Alias; } MATCHER_P2(IsFunctionDeclaration,