From deb02340be26312d04a9b8a99d6126f047f7b45b Mon Sep 17 00:00:00 2001 From: Denis Slynko Date: Tue, 3 Jun 2025 18:15:08 +0300 Subject: [PATCH] [ANI] Fix signatures of Record methods Fix signatures of `escompat.Record` methods `$_get` and `$_set` which are used through ANI. The changes are required due to introduction of union descriptor in ArkTS runtime, which makes union types being non-erased during compilation Issue: #ICB6V0 Change-Id: I9edd4183178431031c8105ca9f93879883e322ac Signed-off-by: Denis Slynko --- .../ability_delegator/src/ets_ability_delegator_utils.cpp | 6 ++++-- .../ani/form_extension_ability/src/sts_form_extension.cpp | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/frameworks/ets/ani/ability_delegator/src/ets_ability_delegator_utils.cpp b/frameworks/ets/ani/ability_delegator/src/ets_ability_delegator_utils.cpp index 8454abe7e4d..e26c83de0ab 100644 --- a/frameworks/ets/ani/ability_delegator/src/ets_ability_delegator_utils.cpp +++ b/frameworks/ets/ani/ability_delegator/src/ets_ability_delegator_utils.cpp @@ -133,14 +133,16 @@ void SetParameters(ani_env *aniEnv, ani_class arguments, ani_object argumentObje TAG_LOGE(AAFwkTag::DELEGATOR, "FindClass failed status: %{public}d", status); return; } + static const char *recordGetName = "X{C{std.core.Numeric}C{std.core.String}}:C{std.core.Object}"; ani_method recordGetMethod; - status = aniEnv->Class_FindMethod(recordCls, "$_get", "Lstd/core/Object;:Lstd/core/Object;", &recordGetMethod); + status = aniEnv->Class_FindMethod(recordCls, "$_get", recordGetName, &recordGetMethod); if (status != ANI_OK) { TAG_LOGE(AAFwkTag::DELEGATOR, "Class_FindMethod failed status: %{public}d", status); return; } + static const char *recordSetName = "X{C{std.core.Numeric}C{std.core.String}}C{std.core.Object}:"; ani_method recordSetMethod; - status = aniEnv->Class_FindMethod(recordCls, "$_set", "Lstd/core/Object;Lstd/core/Object;:V", &recordSetMethod); + status = aniEnv->Class_FindMethod(recordCls, "$_set", recordSetName, &recordSetMethod); if (status != ANI_OK) { TAG_LOGE(AAFwkTag::DELEGATOR, "Class_FindMethod failed status: %{public}d", status); return; diff --git a/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp b/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp index c8ccbbadf84..f44a089c9c7 100644 --- a/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp +++ b/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp @@ -583,8 +583,9 @@ bool STSFormExtension::CreateAndFillRecordObject(ani_env *env, const std::mapClass_FindMethod(recordCls, "$_set", "Lstd/core/Object;Lstd/core/Object;:V", &recordSetMethod); + status = env->Class_FindMethod(recordCls, "$_set", recordSetName, &recordSetMethod); if (status != ANI_OK) { TAG_LOGE(AAFwkTag::FORM_EXT, "Class_FindMethod set failed: %{public}d", status); return false; -- Gitee