From 3ece40c31eb715a46dcb9a611307ebb9d71bcacf Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 16 Feb 2022 16:42:23 +0100 Subject: QmlDesigner: Distinguish between different import kinds There can be normal imports, module dependencies and imports from reexported imports. Change-Id: I67e28f0676eb0b0d04fea1406954c9f2d4032e28 Reviewed-by: Thomas Hartmann --- .../designercore/projectstorage/projectstorage.h | 3 +++ tests/unit/unittest/projectstorage-test.cpp | 30 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index c04e1c10a9..734c9366d2 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -2205,17 +2205,20 @@ private: table.addUniqueIndex({sourceIdColumn, moduleIdColumn, + kindColumn, sourceModuleIdColumn, moduleExportedModuleIdColumn}, "majorVersion IS NULL AND minorVersion IS NULL"); table.addUniqueIndex({sourceIdColumn, moduleIdColumn, + kindColumn, sourceModuleIdColumn, majorVersionColumn, moduleExportedModuleIdColumn}, "majorVersion IS NOT NULL AND minorVersion IS NULL"); table.addUniqueIndex({sourceIdColumn, moduleIdColumn, + kindColumn, sourceModuleIdColumn, majorVersionColumn, minorVersionColumn, diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp index ad432822e4..4ae429a3ff 100644 --- a/tests/unit/unittest/projectstorage-test.cpp +++ b/tests/unit/unittest/projectstorage-test.cpp @@ -4096,4 +4096,34 @@ TEST_F(ProjectStorage, ModuleExportedImportPreventCollisionIfModuleIsIndirectlyR UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem")))))); } +TEST_F(ProjectStorage, DistinguishBetweenImportKinds) +{ + ModuleId qml1ModuleId{storage.moduleId("Qml1")}; + ModuleId qml11ModuleId{storage.moduleId("Qml11")}; + auto package{createSimpleSynchronizationPackage()}; + package.moduleDependencies.emplace_back(qmlModuleId, Storage::Version{}, sourceId1); + package.moduleDependencies.emplace_back(qml1ModuleId, Storage::Version{1}, sourceId1); + package.imports.emplace_back(qml1ModuleId, Storage::Version{}, sourceId1); + package.moduleDependencies.emplace_back(qml11ModuleId, Storage::Version{1, 1}, sourceId1); + package.imports.emplace_back(qml11ModuleId, Storage::Version{1, 1}, sourceId1); + + storage.synchronize(std::move(package)); + + ASSERT_THAT( + storage.fetchTypes(), + UnorderedElementsAre( + AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qmlModuleId, "Object"), + IsExportedType(qmlModuleId, "Obj"), + IsExportedType(qmlNativeModuleId, "QObject")))), + AllOf(IsStorageType(sourceId1, + "QQuickItem", + fetchTypeId(sourceId2, "QObject"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item"), + IsExportedType(qtQuickNativeModuleId, "QQuickItem")))))); +} + } // namespace -- cgit v1.2.1