diff options
author | Marco Bubke <marco.bubke@qt.io> | 2022-02-17 15:10:11 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-02-18 07:55:58 +0000 |
commit | 6772aab7c285d3dbf75e790a5c15092a911c08d0 (patch) | |
tree | 9c09376722fa420ceb97fcaa0b70d8020afd2253 | |
parent | f6cff719a9fe03ea4a7c4bf077be56cf37219315 (diff) | |
download | qt-creator-6772aab7c285d3dbf75e790a5c15092a911c08d0.tar.gz |
QmlDesigner: Distinguish between dependency and import reexports
Sometimes there can be the same import from a dependency and an import.
It will be needed for later updates of the reexports too.
Change-Id: I18cf7d5a03ccbfa3857b54b7d5a5148b6797e718
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
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 |