forked from qt-creator/qt-creator
QmlDesigner: Get exported type names for type id and source id
It is matching the document imports with the exported type names. Task-number: DS-10265 Change-Id: I0623cd0b3d04fa1a8c05354a194f10f3d8948b21 Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
This commit is contained in:
@@ -159,6 +159,13 @@ public:
|
|||||||
.template valuesWithTransaction<Storage::Info::ExportedTypeName>(4, typeId);
|
.template valuesWithTransaction<Storage::Info::ExportedTypeName>(4, typeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Storage::Info::ExportedTypeNames exportedTypeNames(TypeId typeId,
|
||||||
|
SourceId sourceId) const override
|
||||||
|
{
|
||||||
|
return selectExportedTypesByTypeIdAndSourceIdStatement
|
||||||
|
.template valuesWithTransaction<Storage::Info::ExportedTypeName>(4, typeId, sourceId);
|
||||||
|
}
|
||||||
|
|
||||||
ImportId importId(const Storage::Import &import) const override
|
ImportId importId(const Storage::Import &import) const override
|
||||||
{
|
{
|
||||||
return Sqlite::withDeferredTransaction(database, [&] {
|
return Sqlite::withDeferredTransaction(database, [&] {
|
||||||
@@ -2757,6 +2764,11 @@ public:
|
|||||||
"SELECT moduleId, name, ifnull(majorVersion, -1), ifnull(minorVersion, -1) FROM "
|
"SELECT moduleId, name, ifnull(majorVersion, -1), ifnull(minorVersion, -1) FROM "
|
||||||
"exportedTypeNames WHERE typeId=?",
|
"exportedTypeNames WHERE typeId=?",
|
||||||
database};
|
database};
|
||||||
|
mutable ReadStatement<4, 2> selectExportedTypesByTypeIdAndSourceIdStatement{
|
||||||
|
"SELECT etn.moduleId, name, ifnull(etn.majorVersion, -1), ifnull(etn.minorVersion, -1) "
|
||||||
|
"FROM exportedTypeNames AS etn JOIN documentImports USING(moduleId) WHERE typeId=?1 AND "
|
||||||
|
"sourceId=?2",
|
||||||
|
database};
|
||||||
mutable ReadStatement<7> selectTypesStatement{
|
mutable ReadStatement<7> selectTypesStatement{
|
||||||
"SELECT sourceId, t.name, t.typeId, prototypeId, extensionId, traits, pd.name "
|
"SELECT sourceId, t.name, t.typeId, prototypeId, extensionId, traits, pd.name "
|
||||||
"FROM types AS t LEFT JOIN propertyDeclarations AS pd "
|
"FROM types AS t LEFT JOIN propertyDeclarations AS pd "
|
||||||
|
@@ -27,6 +27,9 @@ public:
|
|||||||
= 0;
|
= 0;
|
||||||
virtual TypeId typeId(ImportedTypeNameId typeNameId) const = 0;
|
virtual TypeId typeId(ImportedTypeNameId typeNameId) const = 0;
|
||||||
virtual Storage::Info::ExportedTypeNames exportedTypeNames(TypeId typeId) const = 0;
|
virtual Storage::Info::ExportedTypeNames exportedTypeNames(TypeId typeId) const = 0;
|
||||||
|
virtual Storage::Info::ExportedTypeNames exportedTypeNames(TypeId typeId,
|
||||||
|
SourceId sourceId) const
|
||||||
|
= 0;
|
||||||
virtual ImportId importId(const Storage::Import &import) const = 0;
|
virtual ImportId importId(const Storage::Import &import) const = 0;
|
||||||
virtual ImportedTypeNameId importedTypeNameId(ImportId sourceId, Utils::SmallStringView typeName)
|
virtual ImportedTypeNameId importedTypeNameId(ImportId sourceId, Utils::SmallStringView typeName)
|
||||||
= 0;
|
= 0;
|
||||||
|
@@ -118,6 +118,10 @@ public:
|
|||||||
exportedTypeNames,
|
exportedTypeNames,
|
||||||
(QmlDesigner::TypeId),
|
(QmlDesigner::TypeId),
|
||||||
(const, override));
|
(const, override));
|
||||||
|
MOCK_METHOD(QmlDesigner::Storage::Info::ExportedTypeNames,
|
||||||
|
exportedTypeNames,
|
||||||
|
(QmlDesigner::TypeId, QmlDesigner::SourceId),
|
||||||
|
(const, override));
|
||||||
|
|
||||||
MOCK_METHOD(QmlDesigner::ImportId,
|
MOCK_METHOD(QmlDesigner::ImportId,
|
||||||
importId,
|
importId,
|
||||||
|
@@ -6970,4 +6970,41 @@ TEST_F(ProjectStorage, get_no_exported_type_names_if_type_id_is_invalid)
|
|||||||
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ProjectStorage, get_exported_type_names_for_source_id)
|
||||||
|
{
|
||||||
|
auto package{createSimpleSynchronizationPackage()};
|
||||||
|
package.imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId3);
|
||||||
|
storage.synchronize(package);
|
||||||
|
auto typeId = fetchTypeId(sourceId2, "QObject");
|
||||||
|
|
||||||
|
auto exportedTypeNames = storage.exportedTypeNames(typeId, sourceId3);
|
||||||
|
|
||||||
|
ASSERT_THAT(exportedTypeNames,
|
||||||
|
UnorderedElementsAre(IsInfoExportTypeNames(qmlModuleId, "Object", 2, -1),
|
||||||
|
IsInfoExportTypeNames(qmlModuleId, "Obj", 2, -1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ProjectStorage, get_no_exported_type_names_for_source_id_for_invalid_type_id)
|
||||||
|
{
|
||||||
|
auto package{createSimpleSynchronizationPackage()};
|
||||||
|
package.imports.emplace_back(qmlModuleId, Storage::Version{}, sourceId3);
|
||||||
|
storage.synchronize(package);
|
||||||
|
TypeId typeId;
|
||||||
|
|
||||||
|
auto exportedTypeNames = storage.exportedTypeNames(typeId, sourceId3);
|
||||||
|
|
||||||
|
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ProjectStorage, get_no_exported_type_names_for_source_id_for_non_matching_import)
|
||||||
|
{
|
||||||
|
auto package{createSimpleSynchronizationPackage()};
|
||||||
|
package.imports.emplace_back(qtQuickModuleId, Storage::Version{}, sourceId3);
|
||||||
|
storage.synchronize(package);
|
||||||
|
auto typeId = fetchTypeId(sourceId2, "QObject");
|
||||||
|
|
||||||
|
auto exportedTypeNames = storage.exportedTypeNames(typeId, sourceId3);
|
||||||
|
|
||||||
|
ASSERT_THAT(exportedTypeNames, IsEmpty());
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
Reference in New Issue
Block a user