1 #pragma once 2 3 #include <fbjni/fbjni.h> 4 5 namespace jni = facebook::jni; 6 7 namespace expo::java { 8 9 template<typename E = jobject> 10 struct Iterable : public jni::JavaClass<Iterable<E>> { 11 constexpr static auto kJavaDescriptor = "Ljava/lang/Iterable;"; 12 }; 13 14 template<typename E = jobject> 15 struct Collection : public jni::JavaClass<Collection<E>, Iterable<E>> { 16 constexpr static auto kJavaDescriptor = "Ljava/util/Collection;"; 17 addCollection18 bool add(jni::alias_ref<E> element) { 19 static auto addMethod = Collection<E>::javaClassStatic()-> 20 template getMethod<jboolean(jni::alias_ref<jni::JObject>)>("add"); 21 return addMethod(this->self(), element); 22 } 23 }; 24 25 template<typename E = jobject> 26 struct List : public jni::JavaClass<List<E>, Collection<E>> { 27 constexpr static auto kJavaDescriptor = "Ljava/util/List;"; 28 }; 29 30 template<typename E = jobject> 31 struct ArrayList : public jni::JavaClass<ArrayList<E>, List<E>> { 32 constexpr static auto kJavaDescriptor = "Ljava/util/ArrayList;"; 33 createArrayList34 static jni::local_ref<typename ArrayList<E>::javaobject> create(size_t size) { 35 return ArrayList<E>::newInstance((int) size); 36 } 37 }; 38 39 template<typename K = jobject, typename V = jobject> 40 struct Map : public jni::JavaClass<Map<K, V>> { 41 constexpr static auto kJavaDescriptor = "Ljava/util/Map;"; 42 putMap43 jni::local_ref<V> put(jni::alias_ref<K> key, jni::alias_ref<V> value) { 44 static auto putMethod = Map<K, V>::javaClassStatic()-> 45 template getMethod<jni::local_ref<V>(jni::alias_ref<K>, jni::alias_ref<V>)>("put"); 46 return putMethod(this->self(), key, value); 47 } 48 }; 49 50 template<typename K = jobject, typename V = jobject> 51 struct HashMap : public jni::JavaClass<HashMap<K, V>, Map<K, V>> { 52 constexpr static auto kJavaDescriptor = "Ljava/util/HashMap;"; 53 }; 54 55 template<typename K = jobject, typename V = jobject> 56 struct LinkedHashMap : public jni::JavaClass<LinkedHashMap<K, V>, HashMap<K, V>> { 57 constexpr static auto kJavaDescriptor = "Ljava/util/LinkedHashMap;"; 58 createLinkedHashMap59 static jni::local_ref<typename LinkedHashMap<K, V>::javaobject> create(size_t size) { 60 return LinkedHashMap<K, V>::newInstance((int) size); 61 } 62 }; 63 } // namespace expo::java 64