diff options
3 files changed, 46 insertions, 5 deletions
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index 734c9366d2..72ff942af2 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -1374,10 +1374,14 @@ private: Storage::Version{majorVersion, minorVersion}, import.sourceId}; - insertDocumentImport(additionImport, - Storage::ImportKind::ModuleExportedImport, - import.moduleId, - ModuleExportedImportId{moduleExportedImportId}); + auto exportedImportKind = importKind == Storage::ImportKind::Import + ? Storage::ImportKind::ModuleExportedImport + : Storage::ImportKind::ModuleExportedModuleDependency; + + insertDocumentImport(additionImport, + exportedImportKind, + import.moduleId, + ModuleExportedImportId{moduleExportedImportId}); return Sqlite::CallbackControl::Continue; }; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h index 041f278f0a..4fd92a9475 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h @@ -152,7 +152,12 @@ inline int operator<(IsQualified first, IsQualified second) return static_cast<int>(first) < static_cast<int>(second); } -enum class ImportKind : char { Import, ModuleDependency, ModuleExportedImport }; +enum class ImportKind : char { + Import, + ModuleDependency, + ModuleExportedImport, + ModuleExportedModuleDependency +}; class Import { diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp index 4ae429a3ff..0f9c4d35ee 100644 --- a/tests/unit/unittest/projectstorage-test.cpp +++ b/tests/unit/unittest/projectstorage-test.cpp @@ -4126,4 +4126,36 @@ TEST_F(ProjectStorage, DistinguishBetweenImportKinds) IsExportedType(qtQuickNativeModuleId, "QQuickItem")))))); } +TEST_F(ProjectStorage, ModuleExportedImportDistinguishBetweenDependencyAndImportReExports) +{ + auto package{createModuleExportedImportSynchronizationPackage()}; + package.moduleDependencies.emplace_back(qtQuick3DModuleId, Storage::Version{1}, sourceId4); + + storage.synchronize(std::move(package)); + + ASSERT_THAT(storage.fetchTypes(), + UnorderedElementsAre( + AllOf(IsStorageType(sourceId1, + "QQuickItem", + fetchTypeId(sourceId2, "QObject"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item")))), + AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qmlModuleId, "Object")))), + AllOf(IsStorageType(sourceId3, + "QQuickItem3d", + fetchTypeId(sourceId1, "QQuickItem"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qtQuick3DModuleId, "Item3D")))), + AllOf(IsStorageType(sourceId4, + "MyItem", + fetchTypeId(sourceId2, "QObject"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem")))))); +} + } // namespace |