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};
|
"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};
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user