From 590489e2acca2c624f60adec210824cdd5d0e0a1 Mon Sep 17 00:00:00 2001 From: LeechyLiang Date: Sun, 6 Apr 2025 21:51:20 +0800 Subject: [PATCH] Modify signature rawString2Builder Signed-off-by: LeechyLiang Change-Id: I476c5585cb5985015622a34b81915800fbaac420 --- frameworks/js/ani/BUILD.gn | 1 + frameworks/js/ani/vibrator/include/ani_utils.h | 15 ++++++++++++++- frameworks/js/ani/vibrator/src/vibrator_ani.cpp | 17 ++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/frameworks/js/ani/BUILD.gn b/frameworks/js/ani/BUILD.gn index 9767407..f0b4f84 100644 --- a/frameworks/js/ani/BUILD.gn +++ b/frameworks/js/ani/BUILD.gn @@ -36,6 +36,7 @@ ohos_shared_library("vibrator_ani") { "hilog:libhilog", "napi:ace_napi", "runtime_core:ani", + "runtime_core:ani_helpers", ] subsystem_name = "sensors" part_name = "miscdevice" diff --git a/frameworks/js/ani/vibrator/include/ani_utils.h b/frameworks/js/ani/vibrator/include/ani_utils.h index a1ea297..7327610 100644 --- a/frameworks/js/ani/vibrator/include/ani_utils.h +++ b/frameworks/js/ani/vibrator/include/ani_utils.h @@ -17,6 +17,7 @@ #define ANI_UTILS_H #include +#include #include #include @@ -38,7 +39,11 @@ public: static ani_object Wrap([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_class clazz, T* nativePtr) { ani_method ctor; - if (ANI_OK != env->Class_FindMethod(clazz, "", "J:V", &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; + methodCtorSigBuilder.AddLong(); + auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(clazz, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "Not found ''" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -105,6 +110,7 @@ public: bool IsInstanceOf(const std::string& cls_name) { ani_class cls; + // Pls replace manually env_->FindClass(cls_name.c_str(), &cls); ani_boolean ret; @@ -158,6 +164,7 @@ bool UnionAccessor::TryConvert(bool &value) } ani_boolean aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Boolean(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -174,6 +181,7 @@ bool UnionAccessor::TryConvert(int &value) } ani_int aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Int(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -190,6 +198,7 @@ bool UnionAccessor::TryConvert(double &value) } ani_double aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Double(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -224,6 +233,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_boolean val; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", nullptr, &val)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -248,6 +258,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_int intValue; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Int(static_cast(ref), "unboxed", nullptr, &intValue)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -272,6 +283,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_double val; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Double(static_cast(ref), "unboxed", nullptr, &val)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -352,6 +364,7 @@ std::optional OptionalAccessor::Convert() } ani_double aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Double(obj_, "doubleValue", nullptr, &aniValue); if (ret != ANI_OK) { return std::nullopt; diff --git a/frameworks/js/ani/vibrator/src/vibrator_ani.cpp b/frameworks/js/ani/vibrator/src/vibrator_ani.cpp index 5596eb6..3e56ca6 100644 --- a/frameworks/js/ani/vibrator/src/vibrator_ani.cpp +++ b/frameworks/js/ani/vibrator/src/vibrator_ani.cpp @@ -61,12 +61,17 @@ static ani_error CreateAniError(ani_env *env, std::string&& errMsg) { static const char *errorClsName = "Lescompat/Error;"; ani_class cls {}; + // Pls replace manually if (ANI_OK != env->FindClass(errorClsName, &cls)) { MISC_HILOGE("Not found namespace %{public}s.", errorClsName); return nullptr; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "Lstd/core/String;:V", &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; + methodCtorSigBuilder.AddClass({"std", "core", "String"}); + auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { MISC_HILOGE("Not found in %{public}s.", errorClsName); return nullptr; } @@ -114,6 +119,7 @@ static bool SetVibrateProperty(ani_env* env, ani_object effect, const char* prop } ani_double result; + // Pls replace manually if (ANI_OK != env->Object_CallMethodByName_Double(static_cast(propertyRef), "doubleValue", nullptr, &result)) { MISC_HILOGE("Failed to call Method named doubleValue on property \"%{public}s\"", propertyName); @@ -174,6 +180,7 @@ bool SetVibratePropertyInt64(ani_env* env, ani_object effect, const char* proper } ani_double result; + // Pls replace manually if (ANI_OK != env->Object_CallMethodByName_Double(static_cast(propertyRef), "doubleValue", nullptr, &result)) { MISC_HILOGE("Failed to call Method named doubleValue on property \"%{public}s\"", propertyName); @@ -240,6 +247,7 @@ static bool SetVibrateBooleanProperty(ani_env* env, ani_object attribute, const } ani_boolean result; + // Pls replace manually if (ANI_OK != env->Object_CallMethodByName_Boolean(static_cast(propertyRef), "unboxed", nullptr, &result)) { MISC_HILOGE("Failed to call Method named unboxed on property \"%{public}s\"", propertyName); @@ -304,6 +312,7 @@ static int32_t StartVibrate(const VibrateInfo &info) ani_class FindClassInNamespace(ani_env *env, ani_namespace &ns, const char *className) { ani_class cls; + // Pls replace manually if (ANI_OK != env->Namespace_FindClass(ns, className, &cls)) { MISC_HILOGE("Not found '%{public}s'", className); return nullptr; @@ -315,6 +324,7 @@ static void StartVibrationSync([[maybe_unused]] ani_env *env, ani_object effect, { ani_namespace ns; static const char *namespaceName = "L@ohos/vibrator/vibrator;"; + // Pls replace manually if (ANI_OK != env->FindNamespace(namespaceName, &ns)) { MISC_HILOGE("Not found '%{public}s'", namespaceName); return; @@ -385,11 +395,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *namespaceName = "L@ohos/vibrator/vibrator;"; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(namespaceName, &ns)) { MISC_HILOGE("Not found '%{public}s'", namespaceName); return ANI_NOT_FOUND; } + arkts::ani_signature::SignatureBuilder GenerateRandomUUIDSigBuilder; + GenerateRandomUUIDSigBuilder.AddBoolean(); + GenerateRandomUUIDSigBuilder.SetReturnClass("std.core.String"); + auto GenerateRandomUUIDSignature = GenerateRandomUUIDSigBuilder.BuildSignatureDescriptor(); std::array methods = { ani_native_function {"startVibrationSync", nullptr, reinterpret_cast(StartVibrationSync)}, ani_native_function {"isSupportEffectInterally", nullptr, reinterpret_cast(IsSupportEffectInterally)}, -- Gitee