From 644f3aed5622902d9ce23be737251e2b9c2dc13f Mon Sep 17 00:00:00 2001 From: LeechyLiang Date: Sat, 5 Apr 2025 22:21:50 +0800 Subject: [PATCH 1/2] Modify rawSignatureString2SigBuilder Signed-off-by: LeechyLiang Change-Id: Id98a4ee8b653311e4706689805a1379ded0d0dab --- interfaces/ets/ani/i18n/BUILD.gn | 1 + interfaces/ets/ani/i18n/include/i18n.h | 1 + interfaces/ets/ani/i18n/src/i18n.cpp | 83 +++++++++--- interfaces/ets/ani/intl/BUILD.gn | 1 + interfaces/ets/ani/intl/include/intl.h | 1 + interfaces/ets/ani/intl/src/intl.cpp | 174 ++++++++++++++++++------- 6 files changed, 197 insertions(+), 64 deletions(-) diff --git a/interfaces/ets/ani/i18n/BUILD.gn b/interfaces/ets/ani/i18n/BUILD.gn index 2f6bd6fd..6e0f6b1f 100644 --- a/interfaces/ets/ani/i18n/BUILD.gn +++ b/interfaces/ets/ani/i18n/BUILD.gn @@ -21,6 +21,7 @@ ohos_shared_library("i18n_ani") { external_deps = [ "libpng:libpng", "runtime_core:ani", + "runtime_core:ani_helpers", ] part_name = "i18n" subsystem_name = "global" diff --git a/interfaces/ets/ani/i18n/include/i18n.h b/interfaces/ets/ani/i18n/include/i18n.h index c2008127..ae7578dd 100644 --- a/interfaces/ets/ani/i18n/include/i18n.h +++ b/interfaces/ets/ani/i18n/include/i18n.h @@ -17,6 +17,7 @@ #define I18N_ANI_H #include +#include #include "i18n_calendar.h" #include "i18n_timezone.h" diff --git a/interfaces/ets/ani/i18n/src/i18n.cpp b/interfaces/ets/ani/i18n/src/i18n.cpp index 6b5e1b65..037ef583 100644 --- a/interfaces/ets/ani/i18n/src/i18n.cpp +++ b/interfaces/ets/ani/i18n/src/i18n.cpp @@ -159,7 +159,9 @@ ani_object I18nCalendarAddon::getCalendar([[maybe_unused]] ani_env *env, [[maybe } } obj->calendar_ = std::make_unique(ANIStringToString(env, locale), calendartype); - static const char* className = "L@ohos/i18n/i18n/Calendar;"; + static std::string calendarDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Calendar").Descriptor(); + static const char* className = calendarDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -167,7 +169,11 @@ ani_object I18nCalendarAddon::getCalendar([[maybe_unused]] ani_env *env, [[maybe return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -197,7 +203,9 @@ ani_object I18nTimeZoneAddon::i18nGetTimeZone([[maybe_unused]] ani_env *env, [[m } obj->timezone_ = I18nTimeZone::CreateInstance(zoneIDStr, isUndefined); - static const char* className = "L@ohos/i18n/i18n/TimeZone;"; + static std::string timeZoneDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.TimeZone").Descriptor(); + static const char* className = timeZoneDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -205,7 +213,11 @@ ani_object I18nTimeZoneAddon::i18nGetTimeZone([[maybe_unused]] ani_env *env, [[m return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -220,18 +232,32 @@ ani_object I18nTimeZoneAddon::i18nGetTimeZone([[maybe_unused]] ani_env *env, [[m static ani_status BindContextSystem(ani_env *env) { - static const char *className = "L@ohos/i18n/i18n/System;"; + static std::string systemDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.System").Descriptor(); + static const char* className = systemDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder getSystemLanguageSigBuilder; + getSystemLanguageSigBuilder.SetReturnClass("std.core.String"); + auto getSystemLanguageSignature = getSystemLanguageSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder getSystemLocaleSigBuilder; + getSystemLocaleSigBuilder.SetReturnClass("std.core.String"); + auto getSystemLocaleSignature = getSystemLocaleSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder is24HourClockSigBuilder; + is24HourClockSigBuilder.SetReturnBoolean(); + auto is24HourClockSignature = is24HourClockSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder getSystemRegionSigBuilder; + getSystemRegionSigBuilder.SetReturnClass("std.core.String"); + auto getSystemRegionSignature = getSystemRegionSigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function { "getSystemLanguage", ":Lstd/core/String;", reinterpret_cast(getSystemLanguage) }, - ani_native_function { "getSystemLocale", ":Lstd/core/String;", reinterpret_cast(getSystemLocale) }, - ani_native_function { "is24HourClock", ":Z", reinterpret_cast(is24HourClock) }, - ani_native_function { "getSystemRegion", ":Lstd/core/String;", reinterpret_cast(getSystemRegion) }, + ani_native_function{ "getSystemLanguage", getSystemLanguageSignature.c_str(), reinterpret_cast(getSystemLanguage) }, + ani_native_function{ "getSystemLocale", getSystemLocaleSignature.c_str(), reinterpret_cast(getSystemLocale) }, + ani_native_function{ "is24HourClock", is24HourClockSignature.c_str(), reinterpret_cast(is24HourClock) }, + ani_native_function{ "getSystemRegion", getSystemRegionSignature.c_str(), reinterpret_cast(getSystemRegion) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, methods.data(), methods.size())) { @@ -244,17 +270,26 @@ static ani_status BindContextSystem(ani_env *env) static ani_status BindContextCalendar(ani_env *env) { - static const char *className = "L@ohos/i18n/i18n/Calendar;"; + static std::string calendarDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Calendar").Descriptor(); + static const char* className = calendarDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder getTimeZoneSigBuilder; + getTimeZoneSigBuilder.SetReturnClass("std.core.String"); + auto getTimeZoneSignature = getTimeZoneSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder getSigBuilder; + getSigBuilder.AddClass("std.core.String"); + getSigBuilder.SetReturnDouble(); + auto getSignature = getSigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function { "getTimeZone", ":Lstd/core/String;", + ani_native_function { "getTimeZone", getTimeZoneSignature.c_str(), reinterpret_cast(I18nCalendarAddon::CalendarGetTimeZone) }, - ani_native_function { "get", "Lstd/core/String;:D", + ani_native_function { "get", getSignature.c_str(), reinterpret_cast(I18nCalendarAddon::Get) }, }; @@ -268,15 +303,21 @@ static ani_status BindContextCalendar(ani_env *env) static ani_status BindContextUnicode(ani_env *env) { - static const char *className = "L@ohos/i18n/i18n/Unicode;"; + static std::string unicodeDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Unicode").Descriptor(); + static const char* className = unicodeDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder unicodeIsRTLSigBuilder; + unicodeIsRTLSigBuilder.AddClass({"std", "core", "String"}); + unicodeIsRTLSigBuilder.SetReturnBoolean(); + auto unicodeIsRTLSignature = unicodeIsRTLSigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function { "isRTL", "Lstd/core/String;:Z", reinterpret_cast(unicodeIsRTL) }, + ani_native_function{ "isRTL", unicodeIsRTLSignature.c_str(), reinterpret_cast(unicodeIsRTL) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, methods.data(), methods.size())) { @@ -289,18 +330,20 @@ static ani_status BindContextUnicode(ani_env *env) static ani_status BindContextNameSpace(ani_env *env) { - static const char* nameSpaceName = "L@ohos/i18n/i18n;"; + static std::string i18nDesc = + arkts::ani_signature::Builder::BuildNamespace("@ohos.i18n.i18n").Descriptor(); + static const char* nameSpaceName = i18nDesc.c_str(); ani_namespace ns; if (ANI_OK != env->FindNamespace(nameSpaceName, &ns)) { std::cerr << "Not found '" << nameSpaceName << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder i18nIsRTLSigBuilder; + i18nIsRTLSigBuilder.AddClass({"std", "core", "String"}); + i18nIsRTLSigBuilder.SetReturnBoolean(); + auto i18nIsRTLSignature = i18nIsRTLSigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function { "getCalendar", "Lstd/core/String;Lstd/core/String;:L@ohos/i18n/i18n/Calendar;", - reinterpret_cast(I18nCalendarAddon::getCalendar) }, - ani_native_function { "isRTL", "Lstd/core/String;:Z", reinterpret_cast(i18nIsRTL) }, - ani_native_function { "getTimeZone", "Lstd/core/String;:L@ohos/i18n/i18n/TimeZone;", - reinterpret_cast(I18nTimeZoneAddon::i18nGetTimeZone) }, + ani_native_function{ "isRTL", i18nIsRTLSignature.c_str(), reinterpret_cast(i18nIsRTL) }, }; if (ANI_OK != env->Namespace_BindNativeFunctions(ns, methods.data(), methods.size())) { std::cerr << "Cannot bind native methods to '" << nameSpaceName << "'" << std::endl; diff --git a/interfaces/ets/ani/intl/BUILD.gn b/interfaces/ets/ani/intl/BUILD.gn index f27ea366..0b3c9afd 100644 --- a/interfaces/ets/ani/intl/BUILD.gn +++ b/interfaces/ets/ani/intl/BUILD.gn @@ -21,6 +21,7 @@ ohos_shared_library("intl_ani") { external_deps = [ "icu:shared_icuuc", "runtime_core:ani", + "runtime_core:ani_helpers", ] part_name = "i18n" subsystem_name = "global" diff --git a/interfaces/ets/ani/intl/include/intl.h b/interfaces/ets/ani/intl/include/intl.h index 70808d84..3978281c 100644 --- a/interfaces/ets/ani/intl/include/intl.h +++ b/interfaces/ets/ani/intl/include/intl.h @@ -17,6 +17,7 @@ #define INTL_ANI_H #include +#include #include #include diff --git a/interfaces/ets/ani/intl/src/intl.cpp b/interfaces/ets/ani/intl/src/intl.cpp index 7e7e592f..9280a9bd 100644 --- a/interfaces/ets/ani/intl/src/intl.cpp +++ b/interfaces/ets/ani/intl/src/intl.cpp @@ -117,7 +117,10 @@ static bool getBooleanMember(ani_env *env, ani_object options, } ani_boolean ret; - env->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", ":Z", &ret); + arkts::ani_signature::SignatureBuilder unboxedSigBuilder; + unboxedSigBuilder.SetReturnBoolean(); + auto unboxedSignature = unboxedSigBuilder.BuildSignatureDescriptor(); + env->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", unboxedSignature.c_str(), &ret); member = ret; return true; } @@ -152,7 +155,10 @@ static bool getDoubleMember(ani_env *env, ani_object options, return false; } - env->Object_CallMethodByName_Double(static_cast(ret), "unboxed", ":D", &member); + arkts::ani_signature::SignatureBuilder unboxedSigBuilder; + unboxedSigBuilder.SetReturnDouble(); + auto unboxedSignature = unboxedSigBuilder.BuildSignatureDescriptor(); + env->Object_CallMethodByName_Double(static_cast(ret), "unboxed", unboxedSignature.c_str(), &member); return true; } @@ -197,7 +203,8 @@ ani_string IntlAniAddon::DateTimeFormat_format([[maybe_unused]] ani_env *env, [[ ani_string ret; env->String_NewUTF8(str.c_str(), str.size(), &ret); ani_class cls; - if (ANI_OK != env->FindClass("Lescompat/Date;", &cls)) { + auto classTypeDate = arkts::ani_signature::Builder::BuildClass({"escompat", "Date"}); + if (ANI_OK != env->FindClass(classTypeDate.Descriptor().c_str(), &cls)) { std::cerr << "Not found 'Lescompat/Date'" << std::endl; return ret; } @@ -228,7 +235,9 @@ ani_object IntlAniAddon::DateTimeFormat_resolvedOptions([[maybe_unused]] ani_env obj->datefmt_->GetResolvedOptions(options); ani_object DateTimeOptions = {}; - static const char *className = "L@ohos/intl/intl/DateTimeOptionsInner;"; + static std::string dateTimeOptionsInnerDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeOptionsInner").Descriptor(); + static const char* className = dateTimeOptionsInnerDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -236,7 +245,8 @@ ani_object IntlAniAddon::DateTimeFormat_resolvedOptions([[maybe_unused]] ani_env } 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 << "get ctor Failed'" << className << "'" << std::endl; return DateTimeOptions; } @@ -290,7 +300,9 @@ ani_object IntlAniAddon::NumberFormat_resolvedOptions([[maybe_unused]] ani_env * ani_object NumberOptions = {}; - static const char *className = "L@ohos/intl/intl/NumberOptionsInner;"; + static std::string numberOptionsInnerDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberOptionsInner").Descriptor(); + static const char* className = numberOptionsInnerDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -298,7 +310,8 @@ ani_object IntlAniAddon::NumberFormat_resolvedOptions([[maybe_unused]] ani_env * } 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 << "get ctor Failed'" << className << "'" << std::endl; return NumberOptions; } @@ -347,7 +360,9 @@ ani_object IntlAniAddon::Locale_create0([[maybe_unused]] ani_env *env, [[maybe_u std::unique_ptr obj = std::make_unique(); obj->locale_ = std::make_unique("", map); - static const char *className = "L@ohos/intl/intl/Locale;"; + static std::string localeDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.Locale").Descriptor(); + static const char* className = localeDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -356,7 +371,11 @@ ani_object IntlAniAddon::Locale_create0([[maybe_unused]] ani_env *env, [[maybe_u } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -411,7 +430,11 @@ ani_object IntlAniAddon::Locale_create1([[maybe_unused]] ani_env *env, [[maybe_u } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -429,13 +452,16 @@ std::vector getLocaleTags(ani_env *env, ani_object locale) { std::vector localeTags; ani_class stringClass; - env->FindClass("Lstd/core/String;", &stringClass); + auto classTypeString = arkts::ani_signature::Builder::BuildClass({"std", "core", "String"}); + env->FindClass(classTypeString.Descriptor().c_str(), &stringClass); ani_boolean isString; env->Object_InstanceOf(locale, stringClass, &isString); if (isString) { localeTags.push_back(AniStrToString(env, locale)); } else { - static const char *className = "Lescompat/Array;"; + static std::string arrayDesc = + arkts::ani_signature::Builder::BuildClass("escompat.Array").Descriptor(); + static const char* className = arrayDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { return localeTags; @@ -473,7 +499,9 @@ ani_object IntlAniAddon::DateTimeFormat_create0([[maybe_unused]] ani_env *env, [ obj->datefmt_ = DateTimeFormat::CreateInstance(localeTags, map); - static const char *className = "L@ohos/intl/intl/DateTimeFormat;"; + static std::string dateTimeFormatDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); + static const char* className = dateTimeFormatDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -482,7 +510,11 @@ ani_object IntlAniAddon::DateTimeFormat_create0([[maybe_unused]] ani_env *env, [ } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -538,7 +570,8 @@ ani_object IntlAniAddon::DateTimeFormat_create1(ani_env *env, ani_class clazz, a std::unique_ptr obj = std::make_unique(); obj->datefmt_ = DateTimeFormat::CreateInstance(localeTags, map); - std::string className = "L@ohos/intl/intl/DateTimeFormat;"; + static std::string className = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); ani_class cls; if (ANI_OK != env->FindClass(className.c_str(), &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -547,7 +580,11 @@ ani_object IntlAniAddon::DateTimeFormat_create1(ani_env *env, ani_class clazz, a } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -568,7 +605,10 @@ ani_object IntlAniAddon::NumberFormat_create0([[maybe_unused]] ani_env *env, [[m std::unique_ptr obj = std::make_unique(); obj->numberfmt_ = std::make_unique(localeTags, map); - static const char *className = "L@ohos/intl/intl/NumberFormat;"; + static std::string numberFormatDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberFormat").Descriptor(); + static const char* className = numberFormatDesc.c_str(); + ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -577,7 +617,11 @@ ani_object IntlAniAddon::NumberFormat_create0([[maybe_unused]] ani_env *env, [[m } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -635,7 +679,9 @@ ani_object IntlAniAddon::NumberFormat_create1(ani_env *env, ani_class clazz, ani std::unique_ptr obj = std::make_unique(); obj->numberfmt_ = std::make_unique(localeTags, map); - static const char *className = "L@ohos/intl/intl/NumberFormat;"; + static std::string numberFormatDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberFormat").Descriptor(); + static const char* className = numberFormatDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; @@ -644,7 +690,11 @@ ani_object IntlAniAddon::NumberFormat_create1(ani_env *env, ani_class clazz, ani } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "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(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -660,18 +710,26 @@ ani_object IntlAniAddon::NumberFormat_create1(ani_env *env, ani_class clazz, ani ani_status IntlAniAddon::BindContext_Locale(ani_env *env) { - static const char *className = "L@ohos/intl/intl/Locale;"; + static std::string localeDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.Locale").Descriptor(); + static const char* className = localeDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder Locale_create0SigBuilder; + Locale_create0SigBuilder.SetReturnClass("@ohos.intl.intl.Locale"); + auto Locale_create0Signature = Locale_create0SigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder Locale_create1SigBuilder; + Locale_create1SigBuilder.AddClass({"std", "core", "String"}); + Locale_create1SigBuilder.AddClass({"@ohos", "intl", "intl", "LocaleOptions"}); + Locale_create1SigBuilder.SetReturnClass("@ohos.intl.intl.Locale"); + auto Locale_create1Signature = Locale_create1SigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function {"create", ":L@ohos/intl/intl/Locale;", reinterpret_cast(Locale_create0) }, - ani_native_function {"create", - "Lstd/core/String;L@ohos/intl/intl/LocaleOptions;:L@ohos/intl/intl/Locale;", - reinterpret_cast(Locale_create1) }, + ani_native_function{ "create", Locale_create0Signature.c_str(), reinterpret_cast(Locale_create0) }, + ani_native_function{ "create", Locale_create1Signature.c_str(), reinterpret_cast(Locale_create1) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, methods.data(), methods.size())) { @@ -683,23 +741,35 @@ ani_status IntlAniAddon::BindContext_Locale(ani_env *env) ani_status IntlAniAddon::BindContext_DateTimeFormat(ani_env *env) { - static const char *className = "L@ohos/intl/intl/DateTimeFormat;"; + static std::string dateTimeFormatDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); + static const char* className = dateTimeFormatDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder DateTimeFormat_create0SigBuilder; + DateTimeFormat_create0SigBuilder.SetReturnClass("@ohos.intl.intl.DateTimeFormat"); + auto DateTimeFormat_create0Signature = DateTimeFormat_create0SigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder DateTimeFormat_create1SigBuilder; + DateTimeFormat_create1SigBuilder.AddClass({"std", "core", "Object"}); + DateTimeFormat_create1SigBuilder.AddClass({"@ohos", "intl", "intl", "DateTimeOptions"}); + DateTimeFormat_create1SigBuilder.SetReturnClass("@ohos.intl.intl.DateTimeFormat"); + auto DateTimeFormat_create1Signature = DateTimeFormat_create1SigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder DateTimeFormat_formatSigBuilder; + DateTimeFormat_formatSigBuilder.AddClass({"escompat", "Date"}); + DateTimeFormat_formatSigBuilder.SetReturnClass("std.core.String"); + auto DateTimeFormat_formatSignature = DateTimeFormat_formatSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder DateTimeFormat_resolvedOptionsSigBuilder; + DateTimeFormat_resolvedOptionsSigBuilder.SetReturnClass("@ohos.intl.intl.DateTimeOptions"); + auto DateTimeFormat_resolvedOptionsSignature = DateTimeFormat_resolvedOptionsSigBuilder.BuildSignatureDescriptor(); std::array methods = { - ani_native_function {"create", ":L@ohos/intl/intl/DateTimeFormat;", - reinterpret_cast(DateTimeFormat_create0) }, - ani_native_function {"create", - "Lstd/core/Object;L@ohos/intl/intl/DateTimeOptions;:L@ohos/intl/intl/DateTimeFormat;", - reinterpret_cast(DateTimeFormat_create1) }, - ani_native_function {"format", "Lescompat/Date;:Lstd/core/String;", - reinterpret_cast(DateTimeFormat_format) }, - ani_native_function {"resolvedOptions", ":L@ohos/intl/intl/DateTimeOptions;", - reinterpret_cast(DateTimeFormat_resolvedOptions) }, + ani_native_function{ "create", DateTimeFormat_create0Signature.c_str(), reinterpret_cast(DateTimeFormat_create0) }, + ani_native_function{ "create", DateTimeFormat_create1Signature.c_str(), reinterpret_cast(DateTimeFormat_create1) }, + ani_native_function{ "format", DateTimeFormat_formatSignature.c_str(), reinterpret_cast(DateTimeFormat_format) }, + ani_native_function{ "resolvedOptions", DateTimeFormat_resolvedOptionsSignature.c_str(), reinterpret_cast(DateTimeFormat_resolvedOptions) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, methods.data(), methods.size())) { @@ -711,22 +781,38 @@ ani_status IntlAniAddon::BindContext_DateTimeFormat(ani_env *env) ani_status IntlAniAddon::BindContext_NumberFormat(ani_env *env) { - static const char *className = "L@ohos/intl/intl/NumberFormat;"; + static std::string numberFormatDesc = + arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberFormat").Descriptor(); + static const char* className = numberFormatDesc.c_str(); ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; } + arkts::ani_signature::SignatureBuilder NumberFormat_create0SigBuilder; + NumberFormat_create0SigBuilder.SetReturnClass("@ohos.intl.intl.NumberFormat"); + auto NumberFormat_create0Signature = NumberFormat_create0SigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder NumberFormat_create1SigBuilder; + NumberFormat_create1SigBuilder.AddClass({"std", "core", "Object"}); + NumberFormat_create1SigBuilder.AddClass({"@ohos", "intl", "intl", "NumberOptions"}); + NumberFormat_create1SigBuilder.SetReturnClass("@ohos.intl.intl.NumberFormat"); + auto NumberFormat_create1Signature = NumberFormat_create1SigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder NumberFormat_formatSigBuilder; + NumberFormat_formatSigBuilder.AddDouble(); + NumberFormat_formatSigBuilder.SetReturnClass("std.core.String"); + auto NumberFormat_formatSignature = NumberFormat_formatSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder NumberFormat_resolvedOptionsSigBuilder; + NumberFormat_resolvedOptionsSigBuilder.SetReturnClass("@ohos.intl.intl.NumberOptions"); + auto NumberFormat_resolvedOptionsSignature = NumberFormat_resolvedOptionsSigBuilder.BuildSignatureDescriptor(); + arkts::ani_signature::SignatureBuilder getSystemResourceManagerSigBuilder; + getSystemResourceManagerSigBuilder.SetReturnClass("@ohos.resourceManager.resourceManager.ResourceManager"); + auto getSystemResourceManagerSignature = getSystemResourceManagerSigBuilder.BuildSignatureDescriptor(); std::array methods_NumberFormat = { - ani_native_function {"create", ":L@ohos/intl/intl/NumberFormat;", - reinterpret_cast(NumberFormat_create0) }, - ani_native_function {"create", - "Lstd/core/Object;L@ohos/intl/intl/NumberOptions;:L@ohos/intl/intl/NumberFormat;", - reinterpret_cast(NumberFormat_create1) }, - ani_native_function {"format", "D:Lstd/core/String;", reinterpret_cast(NumberFormat_format) }, - ani_native_function {"resolvedOptions", ":L@ohos/intl/intl/NumberOptions;", - reinterpret_cast(NumberFormat_resolvedOptions) }, + ani_native_function{ "create", NumberFormat_create0Signature.c_str(), reinterpret_cast(NumberFormat_create0) }, + ani_native_function{ "create", NumberFormat_create1Signature.c_str(), reinterpret_cast(NumberFormat_create1) }, + ani_native_function{ "format", NumberFormat_formatSignature.c_str(), reinterpret_cast(NumberFormat_format) }, + ani_native_function{ "resolvedOptions", NumberFormat_resolvedOptionsSignature.c_str(), reinterpret_cast(NumberFormat_resolvedOptions) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, methods_NumberFormat.data(), methods_NumberFormat.size())) { -- Gitee From 7e5c9d2fa9988fd13f8f769c2ddeac2e002b8b8b Mon Sep 17 00:00:00 2001 From: LeechyLiang Date: Sun, 6 Apr 2025 21:51:20 +0800 Subject: [PATCH 2/2] Modify signature rawString2Builder Signed-off-by: LeechyLiang Change-Id: I476c5585cb5985015622a34b81915800fbaac420 --- interfaces/ets/ani/i18n/src/i18n.cpp | 8 +++++++ interfaces/ets/ani/intl/src/intl.cpp | 33 +++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/interfaces/ets/ani/i18n/src/i18n.cpp b/interfaces/ets/ani/i18n/src/i18n.cpp index 037ef583..68bd7b67 100644 --- a/interfaces/ets/ani/i18n/src/i18n.cpp +++ b/interfaces/ets/ani/i18n/src/i18n.cpp @@ -163,6 +163,7 @@ ani_object I18nCalendarAddon::getCalendar([[maybe_unused]] ani_env *env, [[maybe arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Calendar").Descriptor(); static const char* className = calendarDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -173,6 +174,7 @@ ani_object I18nCalendarAddon::getCalendar([[maybe_unused]] ani_env *env, [[maybe arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -207,6 +209,7 @@ ani_object I18nTimeZoneAddon::i18nGetTimeZone([[maybe_unused]] ani_env *env, [[m arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.TimeZone").Descriptor(); static const char* className = timeZoneDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -217,6 +220,7 @@ ani_object I18nTimeZoneAddon::i18nGetTimeZone([[maybe_unused]] ani_env *env, [[m arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -236,6 +240,7 @@ static ani_status BindContextSystem(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.System").Descriptor(); static const char* className = systemDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -274,6 +279,7 @@ static ani_status BindContextCalendar(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Calendar").Descriptor(); static const char* className = calendarDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -307,6 +313,7 @@ static ani_status BindContextUnicode(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.i18n.i18n.Unicode").Descriptor(); static const char* className = unicodeDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -334,6 +341,7 @@ static ani_status BindContextNameSpace(ani_env *env) arkts::ani_signature::Builder::BuildNamespace("@ohos.i18n.i18n").Descriptor(); static const char* nameSpaceName = i18nDesc.c_str(); ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nameSpaceName, &ns)) { std::cerr << "Not found '" << nameSpaceName << "'" << std::endl; return (ani_status)ANI_ERROR; diff --git a/interfaces/ets/ani/intl/src/intl.cpp b/interfaces/ets/ani/intl/src/intl.cpp index 9280a9bd..585705ab 100644 --- a/interfaces/ets/ani/intl/src/intl.cpp +++ b/interfaces/ets/ani/intl/src/intl.cpp @@ -93,6 +93,7 @@ static bool getBooleanMember(ani_env *env, ani_object options, const char *className = cName.c_str(); const char *memberName = mName.c_str(); + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return false; @@ -120,6 +121,7 @@ static bool getBooleanMember(ani_env *env, ani_object options, arkts::ani_signature::SignatureBuilder unboxedSigBuilder; unboxedSigBuilder.SetReturnBoolean(); auto unboxedSignature = unboxedSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually env->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", unboxedSignature.c_str(), &ret); member = ret; return true; @@ -132,6 +134,7 @@ static bool getDoubleMember(ani_env *env, ani_object options, const char *className = cName.c_str(); const char *memberName = mName.c_str(); + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return false; @@ -158,6 +161,7 @@ static bool getDoubleMember(ani_env *env, ani_object options, arkts::ani_signature::SignatureBuilder unboxedSigBuilder; unboxedSigBuilder.SetReturnDouble(); auto unboxedSignature = unboxedSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually env->Object_CallMethodByName_Double(static_cast(ret), "unboxed", unboxedSignature.c_str(), &member); return true; } @@ -169,6 +173,7 @@ static bool getStringMember(ani_env *env, ani_object options, std::string cName, const char *className = cName.c_str(); const char *memberName = mName.c_str(); + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return false; @@ -204,12 +209,14 @@ ani_string IntlAniAddon::DateTimeFormat_format([[maybe_unused]] ani_env *env, [[ env->String_NewUTF8(str.c_str(), str.size(), &ret); ani_class cls; auto classTypeDate = arkts::ani_signature::Builder::BuildClass({"escompat", "Date"}); + // Pls replace manually if (ANI_OK != env->FindClass(classTypeDate.Descriptor().c_str(), &cls)) { std::cerr << "Not found 'Lescompat/Date'" << std::endl; return ret; } ani_method getms; + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, "valueOf", nullptr, &getms)) { std::cerr << "Find Method Fail 'valueOf'" << std::endl; return ret; @@ -239,6 +246,7 @@ ani_object IntlAniAddon::DateTimeFormat_resolvedOptions([[maybe_unused]] ani_env arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeOptionsInner").Descriptor(); static const char* className = dateTimeOptionsInnerDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return DateTimeOptions; @@ -246,6 +254,7 @@ ani_object IntlAniAddon::DateTimeFormat_resolvedOptions([[maybe_unused]] ani_env ani_method ctor; auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; return DateTimeOptions; @@ -304,6 +313,7 @@ ani_object IntlAniAddon::NumberFormat_resolvedOptions([[maybe_unused]] ani_env * arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberOptionsInner").Descriptor(); static const char* className = numberOptionsInnerDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return NumberOptions; @@ -311,6 +321,7 @@ ani_object IntlAniAddon::NumberFormat_resolvedOptions([[maybe_unused]] ani_env * ani_method ctor; auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; return NumberOptions; @@ -364,6 +375,7 @@ ani_object IntlAniAddon::Locale_create0([[maybe_unused]] ani_env *env, [[maybe_u arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.Locale").Descriptor(); static const char* className = localeDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -375,6 +387,7 @@ ani_object IntlAniAddon::Locale_create0([[maybe_unused]] ani_env *env, [[maybe_u arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -423,6 +436,7 @@ ani_object IntlAniAddon::Locale_create1([[maybe_unused]] ani_env *env, [[maybe_u obj->locale_ = std::make_unique(localeTag, map); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className.c_str(), &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -434,6 +448,7 @@ ani_object IntlAniAddon::Locale_create1([[maybe_unused]] ani_env *env, [[maybe_u arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -453,6 +468,7 @@ std::vector getLocaleTags(ani_env *env, ani_object locale) std::vector localeTags; ani_class stringClass; auto classTypeString = arkts::ani_signature::Builder::BuildClass({"std", "core", "String"}); + // Pls replace manually env->FindClass(classTypeString.Descriptor().c_str(), &stringClass); ani_boolean isString; env->Object_InstanceOf(locale, stringClass, &isString); @@ -463,6 +479,7 @@ std::vector getLocaleTags(ani_env *env, ani_object locale) arkts::ani_signature::Builder::BuildClass("escompat.Array").Descriptor(); static const char* className = arrayDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { return localeTags; } @@ -476,6 +493,7 @@ std::vector getLocaleTags(ani_env *env, ani_object locale) env->Object_CallMethod_Double(locale, getLengthMethod, &length); for (int i = 0; i < length; i++) { ani_method get; + // Pls replace manually env->Class_FindMethod(cls, "$_get", nullptr, &get); ani_ref value; env->Object_CallMethod_Ref(locale, get, &value, i); @@ -503,6 +521,7 @@ ani_object IntlAniAddon::DateTimeFormat_create0([[maybe_unused]] ani_env *env, [ arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); static const char* className = dateTimeFormatDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -514,6 +533,7 @@ ani_object IntlAniAddon::DateTimeFormat_create0([[maybe_unused]] ani_env *env, [ arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -573,6 +593,7 @@ ani_object IntlAniAddon::DateTimeFormat_create1(ani_env *env, ani_class clazz, a static std::string className = arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className.c_str(), &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -584,6 +605,7 @@ ani_object IntlAniAddon::DateTimeFormat_create1(ani_env *env, ani_class clazz, a arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -610,6 +632,7 @@ ani_object IntlAniAddon::NumberFormat_create0([[maybe_unused]] ani_env *env, [[m static const char* className = numberFormatDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -621,6 +644,7 @@ ani_object IntlAniAddon::NumberFormat_create0([[maybe_unused]] ani_env *env, [[m arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -683,6 +707,7 @@ ani_object IntlAniAddon::NumberFormat_create1(ani_env *env, ani_class clazz, ani arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberFormat").Descriptor(); static const char* className = numberFormatDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -694,6 +719,7 @@ ani_object IntlAniAddon::NumberFormat_create1(ani_env *env, ani_class clazz, ani arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; methodCtorSigBuilder.AddLong(); auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + // Pls replace manually if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "get ctor Failed'" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -714,6 +740,7 @@ ani_status IntlAniAddon::BindContext_Locale(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.Locale").Descriptor(); static const char* className = localeDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -745,6 +772,7 @@ ani_status IntlAniAddon::BindContext_DateTimeFormat(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.DateTimeFormat").Descriptor(); static const char* className = dateTimeFormatDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -785,6 +813,7 @@ ani_status IntlAniAddon::BindContext_NumberFormat(ani_env *env) arkts::ani_signature::Builder::BuildClass("@ohos.intl.intl.NumberFormat").Descriptor(); static const char* className = numberFormatDesc.c_str(); ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return (ani_status)ANI_ERROR; @@ -805,9 +834,7 @@ ani_status IntlAniAddon::BindContext_NumberFormat(ani_env *env) arkts::ani_signature::SignatureBuilder NumberFormat_resolvedOptionsSigBuilder; NumberFormat_resolvedOptionsSigBuilder.SetReturnClass("@ohos.intl.intl.NumberOptions"); auto NumberFormat_resolvedOptionsSignature = NumberFormat_resolvedOptionsSigBuilder.BuildSignatureDescriptor(); - arkts::ani_signature::SignatureBuilder getSystemResourceManagerSigBuilder; - getSystemResourceManagerSigBuilder.SetReturnClass("@ohos.resourceManager.resourceManager.ResourceManager"); - auto getSystemResourceManagerSignature = getSystemResourceManagerSigBuilder.BuildSignatureDescriptor(); + std::array methods_NumberFormat = { ani_native_function{ "create", NumberFormat_create0Signature.c_str(), reinterpret_cast(NumberFormat_create0) }, ani_native_function{ "create", NumberFormat_create1Signature.c_str(), reinterpret_cast(NumberFormat_create1) }, -- Gitee