summaryrefslogtreecommitdiff
path: root/platform/android/src/gson/json_element.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/gson/json_element.cpp')
-rw-r--r--platform/android/src/gson/json_element.cpp33
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