From 79bf0e8af6bf9ec829a352d56b8e70ccc8f4fa41 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 22 Aug 2018 12:27:43 -0700 Subject: [android] jni.hpp 4.0.0 --- platform/android/src/java/util.hpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'platform/android/src/java/util.hpp') diff --git a/platform/android/src/java/util.hpp b/platform/android/src/java/util.hpp index 808f14be15..9b0c01459e 100644 --- a/platform/android/src/java/util.hpp +++ b/platform/android/src/java/util.hpp @@ -14,10 +14,11 @@ public: static constexpr auto Name() { return "java/util/List"; }; template - static jni::Array> toArray(jni::JNIEnv& env, jni::Object list) { - static auto javaClass = jni::Class::Singleton(env); + static jni::Local>> toArray(jni::JNIEnv& env, const jni::Object& list) { + static auto& javaClass = jni::Class::Singleton(env); static auto toArray = javaClass.GetMethod> ()>(env, "toArray"); - return (jni::Array>) list.Call(env, toArray); + + return jni::Local>>(env, list.Call(env, toArray).release()); }; }; @@ -26,10 +27,12 @@ public: static constexpr auto Name() { return "java/util/Arrays"; }; template - static jni::Object asList(jni::JNIEnv& env, jni::Array> array) { - static auto javaClass = jni::Class::Singleton(env); + static jni::Local> asList(jni::JNIEnv& env, const jni::Array>& array) { + static auto& javaClass = jni::Class::Singleton(env); static auto asList = javaClass.GetStaticMethod(jni::Array>)>(env, "asList"); - return javaClass.Call(env, asList, (jni::Array>) array); + + auto typeErasedArray = jni::Local>>(env, jni::NewLocal(env, array).release()); + return javaClass.Call(env, asList, typeErasedArray); } }; @@ -38,10 +41,11 @@ public: static constexpr auto Name() { return "java/util/Set"; }; template - static jni::Array> toArray(jni::JNIEnv& env, jni::Object list) { - static auto javaClass = jni::Class::Singleton(env); + static jni::Local>> toArray(jni::JNIEnv& env, const jni::Object& list) { + static auto& javaClass = jni::Class::Singleton(env); static auto toArray = javaClass.GetMethod> ()>(env, "toArray"); - return (jni::Array>) list.Call(env, toArray); + + return jni::Local>>(env, list.Call(env, toArray).release()); }; }; @@ -54,15 +58,15 @@ public: static constexpr auto Name() { return "java/util/Map$Entry"; }; template - static jni::Object getKey(jni::JNIEnv& env, jni::Object entry) { - static auto javaClass = jni::Class::Singleton(env); + static jni::Local> getKey(jni::JNIEnv& env, const jni::Object& entry) { + static auto& javaClass = jni::Class::Singleton(env); static auto method = javaClass.GetMethod ()>(env, "getKey"); return jni::Cast(env, jni::Class::Singleton(env), entry.Call(env, method)); } template - static jni::Object getValue(jni::JNIEnv& env, jni::Object entry) { - static auto javaClass = jni::Class::Singleton(env); + static jni::Local> getValue(jni::JNIEnv& env, const jni::Object& entry) { + static auto& javaClass = jni::Class::Singleton(env); static auto method = javaClass.GetMethod ()>(env, "getValue"); return jni::Cast(env, jni::Class::Singleton(env), entry.Call(env, method)); } -- cgit v1.2.1