diff --git a/interfaces/ets/ani/i18n/BUILD.gn b/interfaces/ets/ani/i18n/BUILD.gn index 2f6bd6fd23ed50d21b37655a5c8fd8c63b3d0f11..6e0f6b1f84f7d16a9a7d1fdc389883bd8e98e390 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 c2008127eaf0ee6c677c932aa0139f78eb074205..ae7578dd2722febd2958766afe7ddf295873a8bb 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 6b5e1b65658abb2a574e25ee532020de1ecad294..68bd7b67a4ef16691f17c7da1ee3b6a2eedc2084 100644 --- a/interfaces/ets/ani/i18n/src/i18n.cpp +++ b/interfaces/ets/ani/i18n/src/i18n.cpp @@ -159,15 +159,23 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; 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(); + // 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; return nullobj; @@ -197,15 +205,23 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; 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(); + // 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; return nullobj; @@ -220,18 +236,33 @@ 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; + // Pls replace manually 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 +275,27 @@ 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; + // Pls replace manually 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 +309,22 @@ 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; + // Pls replace manually 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 +337,21 @@ 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; + // Pls replace manually 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 f27ea366479f0e7a33f1f9648e7a8a74c83edad5..0b3c9afda5fb0ac755a4ebf865c94112b2497ee5 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 70808d847b2db21aaecb8cc8d5a0cc742359ac1f..3978281ce7838aa2c04dc5899a120032deaf7877 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 7e7e592f15b562a2f419a91862aa76a962e079de..585705ab9a59b9c865bfdbe7f53acc158078aa84 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; @@ -117,7 +118,11 @@ 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(); + // Pls replace manually + env->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", unboxedSignature.c_str(), &ret); member = ret; return true; } @@ -129,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; @@ -152,7 +158,11 @@ 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(); + // Pls replace manually + env->Object_CallMethodByName_Double(static_cast(ret), "unboxed", unboxedSignature.c_str(), &member); return true; } @@ -163,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; @@ -197,12 +208,15 @@ 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"}); + // 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; @@ -228,15 +242,20 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return DateTimeOptions; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &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; } @@ -290,15 +309,20 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; return NumberOptions; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &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; } @@ -347,8 +371,11 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -356,7 +383,12 @@ 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(); + // 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; return nullobj; @@ -404,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; @@ -411,7 +444,12 @@ 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(); + // 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; return nullobj; @@ -429,14 +467,19 @@ 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"}); + // Pls replace manually + 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { return localeTags; } @@ -450,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); @@ -473,8 +517,11 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -482,7 +529,12 @@ 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(); + // 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; return nullobj; @@ -538,8 +590,10 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className.c_str(), &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -547,7 +601,12 @@ 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(); + // 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; return nullobj; @@ -568,8 +627,12 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -577,7 +640,12 @@ 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(); + // 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; return nullobj; @@ -635,8 +703,11 @@ 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; + // Pls replace manually if (ANI_OK != env->FindClass(className, &cls)) { std::cerr << "Not found '" << className << "'" << std::endl; ani_object nullobj = nullptr; @@ -644,7 +715,12 @@ 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(); + // 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; return nullobj; @@ -660,18 +736,27 @@ 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; + // Pls replace manually 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 +768,36 @@ 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; + // Pls replace manually 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 +809,37 @@ 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; + // Pls replace manually 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(); + 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())) {