From f9af036e4c96ff47267e982ffd4afb0c6ae745d5 Mon Sep 17 00:00:00 2001 From: songhuan Date: Tue, 22 Apr 2025 16:03:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=9B=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: songhuan Change-Id: I39d35c017381a6e1d6891468addcc69b04ab9c0d --- .../js/ani/vibrator/src/vibrator_ani.cpp | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/frameworks/js/ani/vibrator/src/vibrator_ani.cpp b/frameworks/js/ani/vibrator/src/vibrator_ani.cpp index 5596eb6..398eeef 100644 --- a/frameworks/js/ani/vibrator/src/vibrator_ani.cpp +++ b/frameworks/js/ani/vibrator/src/vibrator_ani.cpp @@ -57,24 +57,41 @@ typedef struct VibrateInfo { VibratorPattern vibratorPattern; } VibrateInfo; -static ani_error CreateAniError(ani_env *env, std::string&& errMsg) +static void ThrowBusinessError(ani_env *env, int errCode, std::string&& errMsg) { - static const char *errorClsName = "Lescompat/Error;"; + MISC_HILOGD("Begin ThrowBusinessError."); + static const char *errorClsName = "L@ohos/base/BusinessError;"; ani_class cls {}; if (ANI_OK != env->FindClass(errorClsName, &cls)) { - MISC_HILOGE("Not found namespace %{public}s.", errorClsName); - return nullptr; + MISC_HILOGE("find class BusinessError %{public}s failed", errorClsName); + return; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "Lstd/core/String;:V", &ctor)) { - MISC_HILOGE("Not found in %{public}s.", errorClsName); - return nullptr; + if (ANI_OK != env->Class_FindMethod(cls, "", ":V", &ctor)) { + MISC_HILOGE("find method BusinessError.constructor failed"); + return; } - ani_string error_msg; - env->String_NewUTF8(errMsg.c_str(), 17U, &error_msg); ani_object errorObject; - env->Object_New(cls, ctor, &errorObject, error_msg); - return static_cast(errorObject); + if (ANI_OK != env->Object_New(cls, ctor, &errorObject)) { + MISC_HILOGE("create BusinessError object failed"); + return; + } + ani_double aniErrCode = static_cast(errCode); + ani_string errMsgStr; + if (ANI_OK != env->String_NewUTF8(errMsg.c_str(), errMsg.size(), &errMsgStr)) { + MISC_HILOGE("convert errMsg to ani_string failed"); + return; + } + if (ANI_OK != env->Object_SetFieldByName_Double(errorObject, "code", aniErrCode)) { + MISC_HILOGE("set error code failed"); + return; + } + if (ANI_OK != env->Object_SetPropertyByName_Ref(errorObject, "message", errMsgStr)) { + MISC_HILOGE("set error message failed"); + return; + } + env->ThrowError(static_cast(errorObject)); + return; } static bool ParserParamFromVibrateTime(ani_env *env, ani_object effect, VibrateInfo &vibrateInfo) @@ -337,27 +354,23 @@ static void StartVibrationSync([[maybe_unused]] ani_env *env, ani_object effect, env->Object_InstanceOf(effect, vibrateFromFileClass, &isInstanceOfFile); if (isInstanceOfTime) { if (!ParserParamFromVibrateTime(env, effect, vibrateInfo)) { - ani_error error = CreateAniError(env, "ParserParamFromVibrateTime failed!"); - env->ThrowError(error); + ThrowBusinessError(env, PARAMETER_ERROR, "ParserParamFromVibrateTime failed!"); return; } } else if (isInstanceOfPreset) { if (!ParserParamFromVibratePreset(env, effect, vibrateInfo)) { - ani_error error = CreateAniError(env, "ParserParamFromVibratePreset failed!"); - env->ThrowError(error); + ThrowBusinessError(env, PARAMETER_ERROR, "ParserParamFromVibratePreset failed!"); return; } } else if (isInstanceOfFile) { if (!ParserParamFromVibrateFromFile(env, effect, vibrateInfo)) { - ani_error error = CreateAniError(env, "ParserParamFromVibrateFromFile failed!"); - env->ThrowError(error); + ThrowBusinessError(env, PARAMETER_ERROR, "ParserParamFromVibrateFromFile failed!"); return; } } if (!ParserParamFromVibrateAttribute(env, attribute, vibrateInfo)) { - ani_error error = CreateAniError(env, "ParserParamFromVibrateAttribute failed!"); - env->ThrowError(error); + ThrowBusinessError(env, PARAMETER_ERROR, "ParserParamFromVibrateAttribute failed!"); return; } StartVibrate(vibrateInfo); -- Gitee