QmlDesigner: Add comon type cache

There are common types like QtQuick.Item or double which are needed for
a fast lookup.

Task-number: QDS-7380
Change-Id: Ibbdf77e2cc351fc56eeca3b96ac1b83a3feb83c9
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Marco Bubke
2022-08-09 17:36:42 +02:00
committed by Thomas Hartmann
parent 35a773b2dc
commit c7b6d83f94
6 changed files with 275 additions and 6 deletions

View File

@@ -378,6 +378,41 @@ protected:
return package;
}
auto createBuiltinSynchronizationPackage()
{
SynchronizationPackage package;
package.imports.emplace_back(QMLModuleId, Storage::Synchronization::Version{}, sourceId1);
package.moduleDependencies.emplace_back(QMLModuleId,
Storage::Synchronization::Version{},
sourceId1);
package.updatedModuleDependencySourceIds.push_back(sourceId1);
importsSourceId1.emplace_back(QMLModuleId, Storage::Synchronization::Version{}, sourceId1);
moduleDependenciesSourceId1.emplace_back(QMLModuleId,
Storage::Synchronization::Version{},
sourceId1);
package.types.push_back(
Storage::Synchronization::Type{"double",
Storage::Synchronization::ImportedType{},
TypeTraits::Value,
sourceId1,
{Storage::Synchronization::ExportedType{QMLModuleId,
"double"}}});
package.types.push_back(
Storage::Synchronization::Type{"var",
Storage::Synchronization::ImportedType{},
TypeTraits::Value,
sourceId1,
{Storage::Synchronization::ExportedType{QMLModuleId,
"var"}}});
package.updatedSourceIds = {sourceId1};
return package;
}
auto createSynchronizationPackageWithAliases()
{
auto package{createSimpleSynchronizationPackage()};
@@ -983,6 +1018,7 @@ protected:
ModuleId pathToModuleId{storage.moduleId("/path/to")};
ModuleId qtQuick3DModuleId{storage.moduleId("QtQuick3D")};
ModuleId myModuleModuleId{storage.moduleId("MyModule")};
ModuleId QMLModuleId{storage.moduleId("QML")};
Storage::Synchronization::Imports importsSourceId1;
Storage::Synchronization::Imports importsSourceId2;
Storage::Synchronization::Imports importsSourceId3;
@@ -5896,4 +5932,114 @@ TEST_F(ProjectStorage, DontGetTypeForInvalidId)
ASSERT_THAT(type, Eq(Utils::nullopt));
}
TEST_F(ProjectStorage, GetCommonType)
{
auto package{createSimpleSynchronizationPackage()};
storage.synchronize(package);
auto typeId = storage.commonTypeId<QmlDesigner::Storage::Info::QtQuick,
QmlDesigner::Storage::Info::Item>();
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "QQuickItem"));
}
TEST_F(ProjectStorage, GetCommonTypeAgain)
{
auto package{createSimpleSynchronizationPackage()};
storage.synchronize(package);
auto firstTypeId = storage.commonTypeId<QmlDesigner::Storage::Info::QtQuick,
QmlDesigner::Storage::Info::Item>();
auto typeId = storage.commonTypeId<QmlDesigner::Storage::Info::QtQuick,
QmlDesigner::Storage::Info::Item>();
ASSERT_THAT(typeId, firstTypeId);
}
TEST_F(ProjectStorage, GetCommonTypeAfterChangingType)
{
auto package{createSimpleSynchronizationPackage()};
storage.synchronize(package);
auto oldTypeId = storage.commonTypeId<QmlDesigner::Storage::Info::QtQuick,
QmlDesigner::Storage::Info::Item>();
package.types.front().typeName = "QQuickItem2";
storage.synchronize(package);
auto typeId = storage.commonTypeId<QmlDesigner::Storage::Info::QtQuick,
QmlDesigner::Storage::Info::Item>();
ASSERT_THAT(typeId, Ne(oldTypeId));
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "QQuickItem2"));
}
TEST_F(ProjectStorage, GetBuiltinType)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto typeId = storage.builtinTypeId<double>();
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "double"));
}
TEST_F(ProjectStorage, GetBuiltinTypeAgain)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto firstTypeId = storage.builtinTypeId<double>();
auto typeId = storage.builtinTypeId<double>();
ASSERT_THAT(typeId, firstTypeId);
}
TEST_F(ProjectStorage, GetBuiltinTypeAfterChangingType)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto oldTypeId = storage.builtinTypeId<double>();
package.types.front().typeName = "float";
storage.synchronize(package);
auto typeId = storage.builtinTypeId<double>();
ASSERT_THAT(typeId, Ne(oldTypeId));
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "float"));
}
TEST_F(ProjectStorage, GetBuiltinStringType)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto typeId = storage.builtinTypeId<QmlDesigner::Storage::Info::var>();
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "var"));
}
TEST_F(ProjectStorage, GetBuiltinStringTypeAgain)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto firstTypeId = storage.builtinTypeId<QmlDesigner::Storage::Info::var>();
auto typeId = storage.builtinTypeId<QmlDesigner::Storage::Info::var>();
ASSERT_THAT(typeId, firstTypeId);
}
TEST_F(ProjectStorage, GetBuiltinStringTypeAfterChangingType)
{
auto package{createBuiltinSynchronizationPackage()};
storage.synchronize(package);
auto oldTypeId = storage.builtinTypeId<QmlDesigner::Storage::Info::var>();
package.types.back().typeName = "variant";
storage.synchronize(package);
auto typeId = storage.builtinTypeId<QmlDesigner::Storage::Info::var>();
ASSERT_THAT(typeId, Ne(oldTypeId));
ASSERT_THAT(typeId, fetchTypeId(sourceId1, "variant"));
}
} // namespace