diff options
author | Marco Bubke <marco.bubke@qt.io> | 2022-02-16 16:42:23 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2022-02-16 18:10:52 +0000 |
commit | 3ece40c31eb715a46dcb9a611307ebb9d71bcacf (patch) | |
tree | 3d3ae5c3989b7cc9a7dee53c67559f44224b4c4e | |
parent | 3225cd92eba6eacbb64c089796b9ae4bbc86e78e (diff) | |
download | qt-creator-3ece40c31eb715a46dcb9a611307ebb9d71bcacf.tar.gz |
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 <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h | 3 | ||||
-rw-r--r-- | tests/unit/unittest/projectstorage-test.cpp | 30 |
2 files changed, 33 insertions, 0 deletions
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 |