QmlDesigner: Improve exported imports

Fix the qualified import name lockup for exported imports. Maybe we have
to rewrite it complitly.

Task-number: QDS-6827
Change-Id: I6359cda22b0534a8e9fc7725e204985a80737b7a
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2022-04-28 16:31:36 +02:00
parent 4cecdd573a
commit 0c636cc0a6
2 changed files with 37 additions and 2 deletions

View File

@@ -2692,7 +2692,9 @@ public:
"SELECT kind FROM importedTypeNames WHERE importedTypeNameId=?1", database}; "SELECT kind FROM importedTypeNames WHERE importedTypeNameId=?1", database};
mutable ReadStatement<1, 1> selectTypeIdForQualifiedImportedTypeNameNamesStatement{ mutable ReadStatement<1, 1> selectTypeIdForQualifiedImportedTypeNameNamesStatement{
"SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON " "SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON "
"importOrSourceId=importId JOIN exportedTypeNames AS etn USING(moduleId) WHERE " "importOrSourceId=di.importId JOIN documentImports AS di2 ON di.sourceId=di2.sourceId AND "
"di.moduleId=di2.sourceModuleId "
"JOIN exportedTypeNames AS etn ON di2.moduleId=etn.moduleId WHERE "
"itn.kind=2 AND importedTypeNameId=?1 AND itn.name=etn.name AND " "itn.kind=2 AND importedTypeNameId=?1 AND itn.name=etn.name AND "
"(di.majorVersion IS NULL OR (di.majorVersion=etn.majorVersion AND (di.minorVersion IS " "(di.majorVersion IS NULL OR (di.majorVersion=etn.majorVersion AND (di.minorVersion IS "
"NULL OR di.minorVersion>=etn.minorVersion))) ORDER BY etn.majorVersion DESC NULLS FIRST, " "NULL OR di.minorVersion>=etn.minorVersion))) ORDER BY etn.majorVersion DESC NULLS FIRST, "
@@ -2779,7 +2781,7 @@ public:
" iif(mei.isAutoVersion=1, i.minorVersion, mei.minorVersion), " " iif(mei.isAutoVersion=1, i.minorVersion, mei.minorVersion), "
" mei.moduleExportedImportId " " mei.moduleExportedImportId "
" FROM moduleExportedImports AS mei JOIN imports AS i USING(moduleId)) " " FROM moduleExportedImports AS mei JOIN imports AS i USING(moduleId)) "
"SELECT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1), " "SELECT DISTINCT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1), "
" moduleExportedImportId " " moduleExportedImportId "
"FROM imports", "FROM imports",
database}; database};

View File

@@ -4276,4 +4276,37 @@ TEST_F(ProjectStorage, ModuleExportedImportDistinguishBetweenDependencyAndImport
UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem")))))); UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem"))))));
} }
TEST_F(ProjectStorage, ModuleExportedImportWithQualifiedImportedType)
{
auto package{createModuleExportedImportSynchronizationPackage()};
package.types.back().prototype = Storage::QualifiedImportedType{
"Object", Storage::Import{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 } // namespace