summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2022-02-16 16:42:23 +0100
committerMarco Bubke <marco.bubke@qt.io>2022-02-16 18:10:52 +0000
commit3ece40c31eb715a46dcb9a611307ebb9d71bcacf (patch)
tree3d3ae5c3989b7cc9a7dee53c67559f44224b4c4e
parent3225cd92eba6eacbb64c089796b9ae4bbc86e78e (diff)
downloadqt-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.h3
-rw-r--r--tests/unit/unittest/projectstorage-test.cpp30
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