summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2022-02-17 15:10:11 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2022-02-18 07:55:58 +0000
commit6772aab7c285d3dbf75e790a5c15092a911c08d0 (patch)
tree9c09376722fa420ceb97fcaa0b70d8020afd2253
parentf6cff719a9fe03ea4a7c4bf077be56cf37219315 (diff)
downloadqt-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>
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h12
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h7
-rw-r--r--tests/unit/unittest/projectstorage-test.cpp32
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