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 3c951b25125364260b1879851df4f1b832e9b233..677089dc774de77f1c60cd69cf63e199bc385b1a 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 dfda601139d779543f2420a01958bbc6a024dcdd..00df9450366d743704f313c26c564e27b8e5abd0 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 cec91441f4d040c8fcdfe3c8efd4c4af5eeb1ccf..7a6fb2f1969d6c49b5f5e357b60707b17c2b8f7e 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 9f8f7b08f551f2fea4dadf773329500dede24795..68e2533dda2b588c9886cc7d705923707a49e26c 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 947e460b65992a5ec8c5042a6dd205d03ef42c56..3ea12363cfa1f70535617f59e3767555d8dcfac3 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 33782a3d10d71c8cde2bfce292e4caddfb0637ff..392ebf5b5f5a02dc082a8b15f2d13ea92465659e 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)