From e2b34694d67a4641f81d55e99553efd3bb15a216 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Fri, 4 Jul 2025 19:04:55 +0300 Subject: [PATCH] Fix binding static native methods Issue: #ICK4ZJ Signed-off-by: Vyacheslav Cherkashin Change-Id: I585ccde73cbb2f34dab5fe5e3202fff7b625f5b0 --- .../js/src/common/ani_helper/bind_function.h | 27 +++++++++++++++++++ .../ani/bind_function_class.cpp | 2 +- .../js/src/mod_fs/ani/bind_function_class.cpp | 2 +- .../src/mod_hash/ani/bind_function_class.cpp | 2 +- .../ani/bind_function_class.cpp | 2 +- .../mod_statvfs/ani/bind_function_class.cpp | 2 +- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/js/src/common/ani_helper/bind_function.h b/interfaces/kits/js/src/common/ani_helper/bind_function.h index 3c951b251..677089dc7 100644 --- a/interfaces/kits/js/src/common/ani_helper/bind_function.h +++ b/interfaces/kits/js/src/common/ani_helper/bind_function.h @@ -51,6 +51,33 @@ ANI_EXPORT ani_status BindClass(ani_env *env, const char *className, const std:: return ANI_OK; } +template +ANI_EXPORT ani_status BindClassStaticMethods(ani_env *env, const char *className, + const std::array &methods) +{ + if (env == nullptr) { + HILOGE("Invalid parameter env"); + return ANI_INVALID_ARGS; + } + + if (className == nullptr) { + HILOGE("Invalid parameter className"); + return ANI_INVALID_ARGS; + } + + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + HILOGE("Cannot find class '%{private}s'", className); + return ANI_NOT_FOUND; + } + + if (ANI_OK != env->Class_BindStaticNativeMethods(cls, methods.data(), methods.size())) { + HILOGE("Cannot bind static native methods to '%{private}s'", className); + return ANI_ERROR; + } + return ANI_OK; +} + template ANI_EXPORT ani_status BindNamespace( ani_env *env, const char *namespaceStr, const std::array &methods) diff --git a/interfaces/kits/js/src/mod_environment/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_environment/ani/bind_function_class.cpp index dfda60113..00df94503 100644 --- a/interfaces/kits/js/src/mod_environment/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_environment/ani/bind_function_class.cpp @@ -40,7 +40,7 @@ static ani_status BindStaticMethods(ani_env *env) ani_native_function { "getUserHomeDirSync", nullptr, reinterpret_cast(EnvironmentAni::GetUserHomeDirSync) }, }; - return BindClass(env, classDesc, methods); + return BindClassStaticMethods(env, classDesc, methods); } ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) diff --git a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp index cec91441f..7a6fb2f19 100644 --- a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp @@ -233,7 +233,7 @@ static ani_status BindStaticMethods(ani_env *env) ani_native_function { "utimes", nullptr, reinterpret_cast(UtimesAni::Utimes) }, ani_native_function { "writeSync", nullptr, reinterpret_cast(WriteAni::WriteSync) }, }; - return BindClass(env, classDesc, methods); + return BindClassStaticMethods(env, classDesc, methods); } static ani_status DoBindMethods(ani_env *env) diff --git a/interfaces/kits/js/src/mod_hash/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_hash/ani/bind_function_class.cpp index 9f8f7b08f..68e2533dd 100644 --- a/interfaces/kits/js/src/mod_hash/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_hash/ani/bind_function_class.cpp @@ -28,7 +28,7 @@ static ani_status BindStaticMethods(ani_env *env) std::array methods = { ani_native_function { "hashSync", nullptr, reinterpret_cast(HashAni::HashSync) }, }; - return BindClass(env, classDesc, methods); + return BindClassStaticMethods(env, classDesc, methods); } static ani_status BindHashStreamMethods(ani_env *env) diff --git a/interfaces/kits/js/src/mod_securitylabel/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_securitylabel/ani/bind_function_class.cpp index 947e460b6..3ea12363c 100644 --- a/interfaces/kits/js/src/mod_securitylabel/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_securitylabel/ani/bind_function_class.cpp @@ -30,7 +30,7 @@ static ani_status BindStaticMethods(ani_env *env) ani_native_function { "getSecurityLabelSync", nullptr, reinterpret_cast(SecurityLabelAni::GetSecurityLabelSync) }, }; - return BindClass(env, classDesc, methods); + return BindClassStaticMethods(env, classDesc, methods); } ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) diff --git a/interfaces/kits/js/src/mod_statvfs/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_statvfs/ani/bind_function_class.cpp index 33782a3d1..392ebf5b5 100644 --- a/interfaces/kits/js/src/mod_statvfs/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_statvfs/ani/bind_function_class.cpp @@ -30,7 +30,7 @@ static ani_status BindStaticMethods(ani_env *env) ani_native_function { "getFreeSizeSync", nullptr, reinterpret_cast(StatvfsAni::GetFreeSizeSync) }, ani_native_function { "getTotalSizeSync", nullptr, reinterpret_cast(StatvfsAni::GetTotalSizeSync) }, }; - return BindClass(env, classDesc, methods); + return BindClassStaticMethods(env, classDesc, methods); } ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) -- Gitee