From ca5489c0d5e9729bc89a0fbffdadf8063b9bbbea Mon Sep 17 00:00:00 2001 From: tianp Date: Wed, 9 Jul 2025 11:09:11 +0800 Subject: [PATCH] Fix ani signatures Signed-off-by: tianp Change-Id: Iacf8f258f96d8bbc3fe05c5bcf86dc4606665186 --- .../src/common/ani_helper/ani_signature.cpp | 8 +++ .../js/src/common/ani_helper/ani_signature.h | 12 ++++ .../ani/randomaccessfile_ani.cpp | 72 +++++++++++-------- 3 files changed, 63 insertions(+), 29 deletions(-) diff --git a/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp b/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp index f8a2a92de..e2a03eb3a 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp +++ b/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp @@ -128,6 +128,14 @@ const string FS::WriteStream::ctorSig = Builder::BuildSignatureDescriptor({ Buil const Type FS::AtomicFile::classType = Builder::BuildClass("@ohos.file.fs.fileIo.AtomicFile"); const string FS::AtomicFile::classDesc = FS::AtomicFile::classType.Descriptor(); const string FS::AtomicFile::ctorSig = Builder::BuildSignatureDescriptor({ BuiltInTypes::stringType }); +// FS::ReadStreamOptionsInner +const Type FS::ReadStreamOptionsInner::classType = Builder::BuildClass("@ohos.file.fs.ReadStreamOptionsInner"); +const string FS::ReadStreamOptionsInner::classDesc = FS::ReadStreamOptionsInner::classType.Descriptor(); +const string FS::ReadStreamOptionsInner::ctorSig = Builder::BuildSignatureDescriptor({ BuiltInTypes::stringType }); +// FS::WriteStreamOptionsInner +const Type FS::WriteStreamOptionsInner::classType = Builder::BuildClass("@ohos.file.fs.WriteStreamOptionsInner"); +const string FS::WriteStreamOptionsInner::classDesc = FS::WriteStreamOptionsInner::classType.Descriptor(); +const string FS::WriteStreamOptionsInner::ctorSig = Builder::BuildSignatureDescriptor({ BuiltInTypes::stringType }); // FS::LocationType const Type FS::LocationType::classType = Builder::BuildClass("@ohos.file.fs.fileIo.LocationType"); const string FS::LocationType::classDesc = FS::LocationType::classType.Descriptor(); diff --git a/interfaces/kits/js/src/common/ani_helper/ani_signature.h b/interfaces/kits/js/src/common/ani_helper/ani_signature.h index 3938f3fb8..75e3ec0ac 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_signature.h +++ b/interfaces/kits/js/src/common/ani_helper/ani_signature.h @@ -200,6 +200,18 @@ struct AtomicFile : public BaseType { static const string ctorSig; }; +struct ReadStreamOptionsInner : public BaseType { + static const Type classType; + static const string classDesc; + static const string ctorSig; +}; + +struct WriteStreamOptionsInner : public BaseType { + static const Type classType; + static const string classDesc; + static const string ctorSig; +}; + } // namespace FS namespace Impl { diff --git a/interfaces/kits/js/src/mod_fs/class_randomaccessfile/ani/randomaccessfile_ani.cpp b/interfaces/kits/js/src/mod_fs/class_randomaccessfile/ani/randomaccessfile_ani.cpp index 604835791..c8c104f72 100644 --- a/interfaces/kits/js/src/mod_fs/class_randomaccessfile/ani/randomaccessfile_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/class_randomaccessfile/ani/randomaccessfile_ani.cpp @@ -283,31 +283,34 @@ static ani_string GetFilePath(ani_env *env, const int fd) static ani_object CreateReadStreamOptions(ani_env *env, int64_t start, int64_t end) { - static const char *className = "L@ohos/file/fs/ReadStreamOptionsInner;"; + auto classDesc = FS::ReadStreamOptionsInner::classDesc.c_str(); ani_class cls; - if (ANI_OK != env->FindClass(className, &cls)) { - HILOGE("Cannot find class %s", className); + if (ANI_OK != env->FindClass(classDesc, &cls)) { + HILOGE("Cannot find class %s", classDesc); return nullptr; } + + auto ctorDesc = FS::ReadStreamOptionsInner::ctorDesc.c_str(); + auto ctorSig = FS::ReadStreamOptionsInner::ctorSig.c_str(); ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", ":V", &ctor)) { - HILOGE("Cannot find constructor method for class %s", className); + if (ANI_OK != env->Class_FindMethod(cls, ctorDesc, ctorSig, &ctor)) { + HILOGE("Cannot find constructor method for class %s", classDesc); return nullptr; } ani_object obj; if (ANI_OK != env->Object_New(cls, ctor, &obj)) { - HILOGE("New %s obj Failed", className); + HILOGE("New %s obj Failed", classDesc); return nullptr; } ani_field startField = nullptr; ani_field endField = nullptr; if (ANI_OK != env->Class_FindField(cls, "start", &startField)) { - HILOGE("Cannot find start in class %s", className); + HILOGE("Cannot find start in class %s", classDesc); return nullptr; } if (ANI_OK != env->Class_FindField(cls, "end", &endField)) { - HILOGE("Cannot find end in class %s", className); + HILOGE("Cannot find end in class %s", classDesc); return nullptr; } @@ -326,31 +329,35 @@ static ani_object CreateReadStreamOptions(ani_env *env, int64_t start, int64_t e static ani_object CreateWriteStreamOptions(ani_env *env, int64_t start, int flags) { - static const char *className = "L@ohos/file/fs/WriteStreamOptionsInner;"; + auto classDesc = FS::WriteStreamOptionsInner::classDesc.c_str(); ani_class cls; - if (ANI_OK != env->FindClass(className, &cls)) { - HILOGE("Cannot find class %s", className); + if (ANI_OK != env->FindClass(classDesc, &cls)) { + HILOGE("Cannot find class %s", classDesc); return nullptr; } + + auto ctorDesc = FS::WriteStreamOptionsInner::ctorDesc.c_str(); + auto ctorSig = FS::WriteStreamOptionsInner::ctorSig.c_str(); ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", ":V", &ctor)) { - HILOGE("Cannot find constructor method for class %s", className); + if (ANI_OK != env->Class_FindMethod(cls, ctorDesc, ctorSig, &ctor)) { + HILOGE("Cannot find constructor method for class %s", classDesc); return nullptr; } + ani_object obj; if (ANI_OK != env->Object_New(cls, ctor, &obj)) { - HILOGE("New %s obj Failed", className); + HILOGE("New %s obj Failed", classDesc); return nullptr; } ani_field modeField = nullptr; ani_field startField = nullptr; if (ANI_OK != env->Class_FindField(cls, "mode", &modeField)) { - HILOGE("Cannot find mode in class %s", className); + HILOGE("Cannot find mode in class %s", classDesc); return nullptr; } if (ANI_OK != env->Class_FindField(cls, "start", &startField)) { - HILOGE("Cannot find start in class %s", className); + HILOGE("Cannot find start in class %s", classDesc); return nullptr; } @@ -364,20 +371,24 @@ static ani_object CreateWriteStreamOptions(ani_env *env, int64_t start, int flag static ani_object CreateReadStream(ani_env *env, ani_string filePath, ani_object options) { - static const char *className = "L@ohos/file/fs/fileIo/ReadStream;"; + auto classDesc = FS::ReadStream::classDesc.c_str(); ani_class cls; - if (ANI_OK != env->FindClass(className, &cls)) { - HILOGE("Cannot find class %s", className); + if (ANI_OK != env->FindClass(classDesc, &cls)) { + HILOGE("Cannot find class %s", classDesc); return nullptr; } + + auto ctorDesc = FS::ReadStream::ctorDesc.c_str(); + auto ctorSig = FS::ReadStream::ctorSig.c_str(); ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "Lstd/core/String;L@ohos/file/fs/ReadStreamOptions;:V", &ctor)) { - HILOGE("Cannot find constructor method for class %s", className); + if (ANI_OK != env->Class_FindMethod(cls, ctorDesc, ctorSig, &ctor)) { + HILOGE("Cannot find constructor method for class %s", classDesc); return nullptr; } + ani_object obj; if (ANI_OK != env->Object_New(cls, ctor, &obj, filePath, options)) { - HILOGE("New %s obj Failed", className); + HILOGE("New %s obj Failed", classDesc); return nullptr; } @@ -386,21 +397,24 @@ static ani_object CreateReadStream(ani_env *env, ani_string filePath, ani_object static ani_object CreateWriteStream(ani_env *env, ani_string filePath, ani_object options) { - static const char *className = "L@ohos/file/fs/fileIo/WriteStream;"; + auto classDesc = FS::WriteStream::classDesc.c_str(); ani_class cls; - if (ANI_OK != env->FindClass(className, &cls)) { - HILOGE("Cannot find class %s", className); + if (ANI_OK != env->FindClass(classDesc, &cls)) { + HILOGE("Cannot find class %s", classDesc); return nullptr; } + + auto ctorDesc = FS::WriteStream::ctorDesc.c_str(); + auto ctorSig = FS::WriteStream::ctorSig.c_str(); ani_method ctor; - if (ANI_OK != - env->Class_FindMethod(cls, "", "Lstd/core/String;L@ohos/file/fs/WriteStreamOptions;:V", &ctor)) { - HILOGE("Cannot find constructor method for class %s", className); + if (ANI_OK != env->Class_FindMethod(cls, ctorDesc, ctorSig, &ctor)) { + HILOGE("Cannot find constructor method for class %s", classDesc); return nullptr; } + ani_object obj; if (ANI_OK != env->Object_New(cls, ctor, &obj, filePath, options)) { - HILOGE("New %s obj Failed", className); + HILOGE("New %s obj Failed", classDesc); return nullptr; } -- Gitee