From 04451df763b558af903cc7b822baa538a94f0a16 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 14 Feb 2022 11:36:07 +0100 Subject: [PATCH] QmlDesigner: Don't export enumerations as qml types Qml types can be derived. So we have to use a different mechnanism because otherwise we have to export a enumeration type for every derived class too. Task-number: QDS-6182 Change-Id: Ib3ab3629328511e932f4d8cd360cbe3b01369d8f Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Bot --- .../projectstorage/qmltypesparser.cpp | 40 +++++++++++-------- tests/unit/unittest/qmltypesparser-test.cpp | 16 +------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp index 0bc1e1a5b8e..fafca530bf5 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp +++ b/src/plugins/qmldesigner/designercore/projectstorage/qmltypesparser.cpp @@ -99,28 +99,34 @@ Storage::Version createVersion(QTypeRevision qmlVersion) Storage::ExportedTypes createExports(const QList &qmlExports, Utils::SmallStringView interanalName, QmlTypesParser::ProjectStorage &storage, - ModuleId cppModuleId, - Utils::SmallStringView typeNameAppendix = {}) + ModuleId cppModuleId) { Storage::ExportedTypes exportedTypes; exportedTypes.reserve(Utils::usize(qmlExports)); for (const QQmlJSScope::Export &qmlExport : qmlExports) { Utils::SmallString exportedTypeName{qmlExport.type()}; - if (!typeNameAppendix.empty()) { - exportedTypeName += "."; - exportedTypeName += typeNameAppendix; - } exportedTypes.emplace_back(storage.moduleId(Utils::SmallString{qmlExport.package()}), std::move(exportedTypeName), createVersion(qmlExport.version())); } Utils::SmallString cppExportedTypeName{interanalName}; - if (!typeNameAppendix.empty()) { - cppExportedTypeName += "::"; - cppExportedTypeName += typeNameAppendix; - } + exportedTypes.emplace_back(cppModuleId, cppExportedTypeName); + + return exportedTypes; +} + +Storage::ExportedTypes createCppEnumerationExports(Utils::SmallStringView interanalName, + ModuleId cppModuleId, + Utils::SmallStringView enumeration) +{ + Storage::ExportedTypes exportedTypes; + exportedTypes.reserve(1); + + Utils::SmallString cppExportedTypeName{interanalName}; + cppExportedTypeName += "::"; + cppExportedTypeName += enumeration; exportedTypes.emplace_back(cppModuleId, cppExportedTypeName); @@ -283,12 +289,14 @@ EnumerationTypes addEnumerationTypes(Storage::Types &types, for (const QQmlJSMetaEnum &qmlEnumeration : qmlEnumerations) { Utils::SmallString enumerationName{qmlEnumeration.name()}; auto fullTypeName = Utils::SmallString::join({typeName, "::", enumerationName}); - auto &type = types.emplace_back( - fullTypeName, - Storage::ImportedType{Utils::SmallString{}}, - Storage::TypeAccessSemantics::Value | Storage::TypeAccessSemantics::IsEnum, - sourceId, - createExports(qmlExports, typeName, storage, cppModuleId, enumerationName)); + auto &type = types.emplace_back(fullTypeName, + Storage::ImportedType{Utils::SmallString{}}, + Storage::TypeAccessSemantics::Value + | Storage::TypeAccessSemantics::IsEnum, + sourceId, + createCppEnumerationExports(typeName, + cppModuleId, + enumerationName)); enumerationTypes.emplace_back(enumerationName, std::move(fullTypeName)); } diff --git a/tests/unit/unittest/qmltypesparser-test.cpp b/tests/unit/unittest/qmltypesparser-test.cpp index b6c740ace72..28e907a2974 100644 --- a/tests/unit/unittest/qmltypesparser-test.cpp +++ b/tests/unit/unittest/qmltypesparser-test.cpp @@ -428,13 +428,7 @@ TEST_F(QmlTypesParser, EnumerationIsExportedAsType) Storage::TypeAccessSemantics::Value | Storage::TypeAccessSemantics::IsEnum, qmltypesFileSourceId), Field(&Storage::Type::exportedTypes, - UnorderedElementsAre(IsExportedType(qmlModuleId, - "QtObject.NamedColorSpace", - Storage::Version{1, 0}), - IsExportedType(qtQmlModuleId, - "QtObject.NamedColorSpace", - Storage::Version{2, 1}), - IsExportedType(qtQmlNativeModuleId, + UnorderedElementsAre(IsExportedType(qtQmlNativeModuleId, "QObject::NamedColorSpace", Storage::Version{})))), AllOf(IsType("QObject::VerticalLayoutDirection", @@ -442,13 +436,7 @@ TEST_F(QmlTypesParser, EnumerationIsExportedAsType) Storage::TypeAccessSemantics::Value | Storage::TypeAccessSemantics::IsEnum, qmltypesFileSourceId), Field(&Storage::Type::exportedTypes, - UnorderedElementsAre(IsExportedType(qmlModuleId, - "QtObject.VerticalLayoutDirection", - Storage::Version{1, 0}), - IsExportedType(qtQmlModuleId, - "QtObject.VerticalLayoutDirection", - Storage::Version{2, 1}), - IsExportedType(qtQmlNativeModuleId, + UnorderedElementsAre(IsExportedType(qtQmlNativeModuleId, "QObject::VerticalLayoutDirection", Storage::Version{})))), _));