From 110c66f815c62b080c6d58f23b61185448e95184 Mon Sep 17 00:00:00 2001 From: LeechyLiang Date: Sun, 6 Apr 2025 21:51:22 +0800 Subject: [PATCH] Modify signature rawString2Builder Signed-off-by: LeechyLiang Change-Id: I37c27cd8239a4e86c7c3b6e79369b17df924151f --- frameworks/native/backup_ext/ani/BUILD.gn | 1 + .../native/backup_ext/ani/include/ani_utils.h | 21 +++++++++++++--- .../backup_ext/ani/src/ext_backup_ani.cpp | 3 +++ interfaces/kits/ani/file_share/BUILD.gn | 1 + .../ani/file_share/src/ani_file_share.cpp | 9 ++++++- interfaces/kits/ani/file_uri/BUILD.gn | 1 + .../kits/ani/file_uri/src/ani_file_uri.cpp | 24 +++++++++++++++---- 7 files changed, 52 insertions(+), 8 deletions(-) diff --git a/frameworks/native/backup_ext/ani/BUILD.gn b/frameworks/native/backup_ext/ani/BUILD.gn index 098ebf899..662dbb57f 100644 --- a/frameworks/native/backup_ext/ani/BUILD.gn +++ b/frameworks/native/backup_ext/ani/BUILD.gn @@ -53,6 +53,7 @@ ohos_shared_library("backup_ext_ani") { "hitrace:hitrace_meter", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", "samgr:samgr_proxy", ] diff --git a/frameworks/native/backup_ext/ani/include/ani_utils.h b/frameworks/native/backup_ext/ani/include/ani_utils.h index 6ce270f0c..f65e4fd08 100644 --- a/frameworks/native/backup_ext/ani/include/ani_utils.h +++ b/frameworks/native/backup_ext/ani/include/ani_utils.h @@ -17,6 +17,7 @@ #define ANI_UTILS_H #include +#include #include #include @@ -34,19 +35,22 @@ public: ani_object nullobj {}; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { std::cerr << "[ANI] Not found namespace " << nsName << std::endl; return nullobj; } ani_class cls; + // Pls replace manually if (ANI_OK != env->Namespace_FindClass(ns, clsName, &cls)) { std::cerr << "[ANI] Not found class " << clsName << std::endl; return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class " << clsName << std::endl; return nullobj; } @@ -69,13 +73,15 @@ public: ani_object nullobj {}; ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(clsName, &cls)) { std::cerr << "[ANI] Not found class " << clsName << std::endl; return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class " << clsName << std::endl; return nullobj; } @@ -97,7 +103,8 @@ public: ani_object nullobj {}; ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class" << std::endl; return nullobj; } @@ -168,6 +175,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; @@ -221,6 +229,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; @@ -237,6 +246,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; @@ -253,6 +263,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; @@ -287,6 +298,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; @@ -311,6 +323,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; @@ -335,6 +348,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; @@ -413,6 +427,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/native/backup_ext/ani/src/ext_backup_ani.cpp b/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp index d5ac5d1ab..45087e464 100644 --- a/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp +++ b/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include #include "ext_backup_ani.h" #include "b_error/b_error.h" #include "b_error/b_excep_utils.h" @@ -74,6 +75,7 @@ void ExtBackupAni::Init(const std::shared_ptr &r ErrCode ExtBackupAni::CallEtsOnBackup() { + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Void(etsObj_->aniObj, "onBackup", nullptr)) { HILOGE("Failed to call the method: onBackup"); return EINVAL; @@ -88,6 +90,7 @@ ErrCode ExtBackupAni::CallEtsOnRestore() HILOGE("Failed to Create the BundleVersionInner"); return EINVAL; } + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Void(etsObj_->aniObj, "onRestore", nullptr, bundleVersionObj)) { HILOGE("Failed to call the method: onRestore"); return EINVAL; diff --git a/interfaces/kits/ani/file_share/BUILD.gn b/interfaces/kits/ani/file_share/BUILD.gn index 772e9e259..b860d80b7 100644 --- a/interfaces/kits/ani/file_share/BUILD.gn +++ b/interfaces/kits/ani/file_share/BUILD.gn @@ -57,6 +57,7 @@ ohos_shared_library("fileshare_ani") { "init:libbegetutil", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", ] part_name = "app_file_service" subsystem_name = "filemanagement" diff --git a/interfaces/kits/ani/file_share/src/ani_file_share.cpp b/interfaces/kits/ani/file_share/src/ani_file_share.cpp index 800b8e50f..b72f3b6e3 100644 --- a/interfaces/kits/ani/file_share/src/ani_file_share.cpp +++ b/interfaces/kits/ani/file_share/src/ani_file_share.cpp @@ -16,6 +16,7 @@ #include "ani_file_share.h" #include +#include #include #include #include "ability.h" @@ -66,12 +67,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)) { LOGE("%{public}s: Not found namespace %{public}s.", __func__, 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)) { LOGE("%{public}s: Not found in %{public}s.", __func__, errorClsName); return nullptr; } @@ -281,6 +287,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *nsName = "L@ohos/fileshare/fileShare;"; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { LOGE("Not found namespace %{public}s.", nsName); return ANI_NOT_FOUND; diff --git a/interfaces/kits/ani/file_uri/BUILD.gn b/interfaces/kits/ani/file_uri/BUILD.gn index c3545159d..aeeec67dd 100644 --- a/interfaces/kits/ani/file_uri/BUILD.gn +++ b/interfaces/kits/ani/file_uri/BUILD.gn @@ -50,6 +50,7 @@ ohos_shared_library("fileuri_ani") { "hilog:libhilog", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", "samgr:samgr_proxy", ] part_name = "app_file_service" diff --git a/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp b/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp index ee5c314bd..e8e423423 100644 --- a/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp +++ b/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp @@ -14,6 +14,7 @@ */ #include +#include #include #include #include "common_func.h" @@ -51,12 +52,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)) { LOGE("Not found %{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)) { LOGE("Not found method in %{public}s.", errorClsName); return nullptr; } @@ -113,7 +119,8 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) LOGD("FileUriConstructor fileuriEntity: %{public}p.", fileuriEntity.get()); ani_namespace ns; - if (env->FindNamespace("L@ohos/file/fileuri/fileUri;", &ns) != ANI_OK) { + auto namespaceTypefileUri = arkts::ani_signature::Builder::BuildNamespace({"@ohos", "file", "fileuri", "fileUri"}); + if (env->FindNamespace(namespaceTypefileUri.Descriptor().c_str(), &ns) != ANI_OK) { LOGE("Namespace L@ohos/file/fileuri/fileUri not found."); ani_error err = CreateAniError(env, "Namespace L@ohos/file/fileuri/fileUri not found."); env->ThrowError(err); @@ -122,6 +129,7 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) ani_class cls; static const char *className = "LFileUri;"; + // Pls replace manually if (env->Namespace_FindClass(ns, className, &cls) != ANI_OK) { LOGE("Not found class LFileUri in Namespace L@ohos/file/fileuri/fileUri."); ani_error err = CreateAniError(env, "Class LFileUri not found."); @@ -130,7 +138,10 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) } ani_method acquireObj; - if (ANI_OK != env->Class_FindMethod(cls, "acquireFileUriEntity", "J:V", &acquireObj)) { + arkts::ani_signature::SignatureBuilder acquireFileUriEntitySigBuilder; + acquireFileUriEntitySigBuilder.AddLong(); + auto acquireFileUriEntitySignature = acquireFileUriEntitySigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(cls, "acquireFileUriEntity", acquireFileUriEntitySignature.c_str(), &acquireObj)) { LOGE("Not found method acquireFileUriEntity in class LFileUri."); ani_error err = CreateAniError(env, "Method acquireFileUriEntity not found."); env->ThrowError(err); @@ -156,6 +167,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *nsName = "L@ohos/file/fileuri/fileUri;"; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { LOGE("Not found namespace %{public}s.", nsName); return ANI_NOT_FOUND; @@ -170,12 +182,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *className = "LFileUri;"; ani_class fileUriClass; + // Pls replace manually if (ANI_OK != env->Namespace_FindClass(ns, className, &fileUriClass)) { LOGE("Not found class %{public}s in %{public}s.", nsName, nsName); return ANI_NOT_FOUND; } + arkts::ani_signature::SignatureBuilder FileUriConstructorSigBuilder; + FileUriConstructorSigBuilder.AddClass({"std", "core", "String"}); + auto FileUriConstructorSignature = FileUriConstructorSigBuilder.BuildSignatureDescriptor(); std::array classMethods = { - ani_native_function {"", "Lstd/core/String;:V", reinterpret_cast(FileUriConstructor)}, + ani_native_function{ "", FileUriConstructorSignature.c_str(), reinterpret_cast(FileUriConstructor) }, }; if (ANI_OK != env->Class_BindNativeMethods(fileUriClass, classMethods.data(), classMethods.size())) { LOGE("Cannot bind native methods to class %{public}s.", className); -- Gitee