@@ -24,6 +24,47 @@ namespace platform_intl {
2424
2525namespace {
2626
27+ template <typename E = jobject>
28+ struct JArrayList : jni::JavaClass<JArrayList<E>, jni::JList<E>> {
29+ constexpr static auto kJavaDescriptor = " Ljava/util/ArrayList;" ;
30+
31+ using Super = jni::JavaClass<JArrayList<E>, jni::JList<E>>;
32+
33+ static jni::local_ref<JArrayList<E>> create () {
34+ return Super::newInstance ();
35+ }
36+
37+ static jni::local_ref<JArrayList<E>> create (int initialCapacity) {
38+ return Super::newInstance (initialCapacity);
39+ }
40+
41+ bool add (jni::alias_ref<jobject> elem) {
42+ static auto addMethod =
43+ Super::javaClassStatic ()
44+ ->template getMethod <jboolean (jni::alias_ref<jobject>)>(" add" );
45+ return addMethod (Super::self (), elem);
46+ }
47+ };
48+
49+ template <typename K = jobject, typename V = jobject>
50+ struct JHashMap : jni::JavaClass<JHashMap<K, V>, jni::JMap<K, V>> {
51+ constexpr static auto kJavaDescriptor = " Ljava/util/HashMap;" ;
52+
53+ using Super = jni::JavaClass<JHashMap<K, V>, jni::JMap<K, V>>;
54+
55+ static jni::local_ref<JHashMap<K, V>> create () {
56+ return Super::newInstance ();
57+ }
58+
59+ void put (jni::alias_ref<jobject> key, jni::alias_ref<jobject> val) {
60+ static auto putMethod =
61+ Super::javaClassStatic ()
62+ ->template getMethod <jni::alias_ref<jobject>(
63+ jni::alias_ref<jobject>, jni::alias_ref<jobject>)>(" put" );
64+ putMethod (Super::self (), key, val);
65+ }
66+ };
67+
2768using JLocalesList = jni::JList<jni::JString>;
2869using JOptionsMap = jni::JMap<jni::JString, jni::JObject>;
2970using JPartMap = jni::JMap<jni::JString, jni::JString>;
@@ -35,15 +76,16 @@ jni::local_ref<jstring> stringToJava(std::u16string str) {
3576
3677jni::local_ref<JLocalesList> localesToJava (
3778 std::vector<std::u16string> locales) {
38- auto ret = jni::JArrayList<jni::JString>::create (locales.size ());
79+ jni::local_ref<JArrayList<jni::JString>> ret =
80+ JArrayList<jni::JString>::create (locales.size ());
3981 for (const auto &locale : locales) {
4082 ret->add (jni::make_jstring (locale));
4183 }
4284 return ret;
4385}
4486
4587jni::local_ref<JOptionsMap> optionsToJava (const Options &options) {
46- auto ret = jni:: JHashMap<jni::JString, jni::JObject>::create ();
88+ auto ret = JHashMap<jni::JString, jni::JObject>::create ();
4789 for (const auto &kv : options) {
4890 jni::local_ref<jni::JObject> jvalue;
4991 if (kv.second .isBool ()) {
0 commit comments