diff options
Diffstat (limited to 'platform/android/src/gson/json_element.cpp')
-rw-r--r-- | platform/android/src/gson/json_element.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/platform/android/src/gson/json_element.cpp b/platform/android/src/gson/json_element.cpp index 5eaaf531f4..d5304ed674 100644 --- a/platform/android/src/gson/json_element.cpp +++ b/platform/android/src/gson/json_element.cpp @@ -20,17 +20,16 @@ public: jni::JNIEnv& env; jni::Object<JsonElement> operator()(const JsonPrimitive::value value) const { - return jni::Cast(env, JsonPrimitive::New(env, value), JsonElement::javaClass); + return JsonPrimitive::New(env, value); } jni::Object<JsonElement> operator()(const std::vector<mapbox::geometry::value> &values) const { - return jni::Cast(env, JsonArray::New(env, values), JsonElement::javaClass); + return JsonArray::New(env, values); } jni::Object<JsonElement> operator()(const std::unordered_map<std::string, mapbox::geometry::value> &values) const { - return jni::Cast(env, JsonObject::New(env, values), JsonElement::javaClass); + return JsonObject::New(env, values); } - }; @@ -44,13 +43,16 @@ mapbox::geometry::value JsonElement::convert(jni::JNIEnv &env, jni::Object<JsonE if (jsonElement) { if (isJsonPrimitive(env, jsonElement)) { - auto primitive = JsonPrimitive::convert(env, jni::Cast(env, jsonElement, JsonPrimitive::javaClass)); + static auto primitiveClass = jni::Class<JsonPrimitive>::Singleton(env); + auto primitive = JsonPrimitive::convert(env, jni::Cast(env, primitiveClass, jsonElement)); value = mapbox::util::apply_visitor([](auto t) { return mapbox::geometry::value { t }; }, primitive); } else if (isJsonObject(env, jsonElement)) { - mapbox::geometry::property_map map = JsonObject::convert(env, jni::Cast(env, jsonElement, JsonObject::javaClass)); + static auto objectClass = jni::Class<JsonObject>::Singleton(env); + mapbox::geometry::property_map map = JsonObject::convert(env, jni::Cast(env, objectClass, jsonElement)); value = mapbox::util::recursive_wrapper<std::unordered_map<std::string, mapbox::geometry::value>> { map } ; } else if (isJsonArray(env, jsonElement)) { - value = JsonArray::convert(env, jni::Cast(env, jsonElement, JsonArray::javaClass)); + static auto arrayClass = jni::Class<JsonArray>::Singleton(env); + value = JsonArray::convert(env, jni::Cast(env, arrayClass, jsonElement)); } else { value = mapbox::geometry::null_value; } @@ -59,32 +61,33 @@ mapbox::geometry::value JsonElement::convert(jni::JNIEnv &env, jni::Object<JsonE } bool JsonElement::isJsonObject(JNIEnv& env, jni::Object<JsonElement> jsonElement) { - static auto method = JsonElement::javaClass.GetMethod<jni::jboolean ()>(env, "isJsonObject"); + static auto javaClass = jni::Class<JsonElement>::Singleton(env); + static auto method = javaClass.GetMethod<jni::jboolean ()>(env, "isJsonObject"); return jsonElement.Call(env, method); } bool JsonElement::isJsonArray(JNIEnv& env, jni::Object<JsonElement> jsonElement) { - static auto method = JsonElement::javaClass.GetMethod<jni::jboolean ()>(env, "isJsonArray"); + static auto javaClass = jni::Class<JsonElement>::Singleton(env); + static auto method = javaClass.GetMethod<jni::jboolean ()>(env, "isJsonArray"); return jsonElement.Call(env, method); } bool JsonElement::isJsonPrimitive(JNIEnv& env, jni::Object<JsonElement> jsonElement) { - static auto method = JsonElement::javaClass.GetMethod<jni::jboolean ()>(env, "isJsonPrimitive"); + static auto javaClass = jni::Class<JsonElement>::Singleton(env); + static auto method = javaClass.GetMethod<jni::jboolean ()>(env, "isJsonPrimitive"); return jsonElement.Call(env, method); } bool JsonElement::isJsonNull(JNIEnv& env, jni::Object<JsonElement> jsonElement) { - static auto method = JsonElement::javaClass.GetMethod<jni::jboolean ()>(env, "isJsonNull"); + static auto javaClass = jni::Class<JsonElement>::Singleton(env); + static auto method = javaClass.GetMethod<jni::jboolean ()>(env, "isJsonNull"); return jsonElement.Call(env, method); } void JsonElement::registerNative(jni::JNIEnv &env) { - // Lookup the class - javaClass = *jni::Class<JsonElement>::Find(env).NewGlobalRef(env).release(); + jni::Class<JsonElement>::Singleton(env); } -jni::Class<JsonElement> JsonElement::javaClass; - } // namespace gson } // namespace android } // namespace mbgl
\ No newline at end of file |