QmlDesigner: Provide ProjectStorage::localPropertyDeclarationId

Even if there is a property with that name in the prototype chain an
invalid id should be returned.

Task-nubmer: QDS-7281
Change-Id: I08611390c8e9a75036ed5d5b54d2e5637adcfd84
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2022-07-13 14:04:00 +02:00
parent dac7cca02b
commit f31d0f3a0a
2 changed files with 56 additions and 0 deletions

View File

@@ -169,6 +169,13 @@ public:
.template valueWithTransaction<PropertyDeclarationId>(&typeId, propertyName); .template valueWithTransaction<PropertyDeclarationId>(&typeId, propertyName);
} }
PropertyDeclarationId localPropertyDeclarationId(TypeId typeId,
Utils::SmallStringView propertyName) const
{
return selectLocalPropertyDeclarationIdForTypeAndPropertyNameStatement
.template valueWithTransaction<PropertyDeclarationId>(&typeId, propertyName);
}
Utils::optional<Utils::SmallString> propertyName(PropertyDeclarationId propertyDeclarationId) const Utils::optional<Utils::SmallString> propertyName(PropertyDeclarationId propertyDeclarationId) const
{ {
return selectPropertyNameStatement.template optionalValueWithTransaction<Utils::SmallString>( return selectPropertyNameStatement.template optionalValueWithTransaction<Utils::SmallString>(
@@ -2914,6 +2921,11 @@ public:
"SELECT propertyDeclarationId FROM typeChain JOIN propertyDeclarations " "SELECT propertyDeclarationId FROM typeChain JOIN propertyDeclarations "
" USING(typeId) WHERE name=?2 ORDER BY level LIMIT 1", " USING(typeId) WHERE name=?2 ORDER BY level LIMIT 1",
database}; database};
mutable ReadStatement<1, 2> selectLocalPropertyDeclarationIdForTypeAndPropertyNameStatement{
"SELECT propertyDeclarationId "
"FROM propertyDeclarations "
"WHERE typeId=?1 AND name=?2 LIMIT 1",
database};
}; };
extern template class ProjectStorage<Sqlite::Database>; extern template class ProjectStorage<Sqlite::Database>;
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -5685,4 +5685,48 @@ TEST_F(ProjectStorage, GetInvalidPropertyDeclarationIdForWrongPropertyName)
ASSERT_FALSE(propertyId); ASSERT_FALSE(propertyId);
} }
TEST_F(ProjectStorage, GetLocalPropertyDeclarationId)
{
auto package{createPackageWithProperties()};
storage.synchronize(package);
auto typeId = fetchTypeId(sourceId1, "QObject");
auto propertyId = storage.localPropertyDeclarationId(typeId, "data");
ASSERT_THAT(propertyId, HasName("data"));
}
TEST_F(ProjectStorage, GetInvalidLocalPropertyDeclarationIdForWrongType)
{
auto package{createPackageWithProperties()};
storage.synchronize(package);
auto typeId = fetchTypeId(sourceId1, "QObject2");
auto propertyId = storage.localPropertyDeclarationId(typeId, "data");
ASSERT_FALSE(propertyId);
}
TEST_F(ProjectStorage, GetInvalidLocalPropertyDeclarationIdForInvalidTypeId)
{
auto package{createPackageWithProperties()};
storage.synchronize(package);
auto typeId = fetchTypeId(sourceId1, "WrongQObject");
auto propertyId = storage.localPropertyDeclarationId(typeId, "data");
ASSERT_FALSE(propertyId);
}
TEST_F(ProjectStorage, GetInvalidLocalPropertyDeclarationIdForWrongPropertyName)
{
auto package{createPackageWithProperties()};
storage.synchronize(package);
auto typeId = fetchTypeId(sourceId1, "QObject");
auto propertyId = storage.localPropertyDeclarationId(typeId, "wrongName");
ASSERT_FALSE(propertyId);
}
} // namespace } // namespace