forked from qt-creator/qt-creator
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:
@@ -2692,7 +2692,9 @@ public:
|
||||
"SELECT kind FROM importedTypeNames WHERE importedTypeNameId=?1", database};
|
||||
mutable ReadStatement<1, 1> selectTypeIdForQualifiedImportedTypeNameNamesStatement{
|
||||
"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 "
|
||||
"(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, "
|
||||
@@ -2779,7 +2781,7 @@ public:
|
||||
" iif(mei.isAutoVersion=1, i.minorVersion, mei.minorVersion), "
|
||||
" mei.moduleExportedImportId "
|
||||
" 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 "
|
||||
"FROM imports",
|
||||
database};
|
||||
|
@@ -4276,4 +4276,37 @@ TEST_F(ProjectStorage, ModuleExportedImportDistinguishBetweenDependencyAndImport
|
||||
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
|
||||
|
Reference in New Issue
Block a user