summaryrefslogtreecommitdiff
path: root/platform/android/src/geojson/feature.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/geojson/feature.cpp')
-rw-r--r--platform/android/src/geojson/feature.cpp43
1 files changed, 18 insertions, 25 deletions
diff --git a/platform/android/src/geojson/feature.cpp b/platform/android/src/geojson/feature.cpp
index d8a4e829e2..1e02c756eb 100644
--- a/platform/android/src/geojson/feature.cpp
+++ b/platform/android/src/geojson/feature.cpp
@@ -7,57 +7,50 @@ namespace android {
namespace geojson {
mbgl::Feature Feature::convert(jni::JNIEnv& env, jni::Object<Feature> jFeature) {
- // Convert
- auto jGeometry = geometry(env, jFeature);
- auto jProperties = Feature::properties(env, jFeature);
+ auto jGeometry = jni::SeizeLocal(env, geometry(env, jFeature));
+ auto jProperties = jni::SeizeLocal(env, Feature::properties(env, jFeature));
std::experimental::optional<mapbox::geometry::identifier> id;
- auto jId = Feature::id(env, jFeature);
+ auto jId = jni::SeizeLocal(env, Feature::id(env, jFeature));
if (jId) {
- id = { jni::Make<std::string>(env, jId) };
+ id = { jni::Make<std::string>(env, *jId) };
}
- auto feature = mbgl::Feature {
- Geometry::convert(env, jGeometry),
- gson::JsonObject::convert(env, jProperties),
- id
+ return mbgl::Feature {
+ Geometry::convert(env, *jGeometry),
+ gson::JsonObject::convert(env, *jProperties),
+ id
};
-
- // Cleanup
- jni::DeleteLocalRef(env, jGeometry);
- jni::DeleteLocalRef(env, jProperties);
- jni::DeleteLocalRef(env, jId);
-
- return feature;
}
jni::Object<Geometry> Feature::geometry(jni::JNIEnv& env, jni::Object<Feature> jFeature) {
- static auto method = Feature::javaClass.GetMethod<jni::Object<Geometry> ()>(env, "geometry");
+ static auto javaClass = jni::Class<Feature>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::Object<Geometry> ()>(env, "geometry");
return jFeature.Call(env, method);
}
jni::Object<gson::JsonObject> Feature::properties(jni::JNIEnv& env, jni::Object<Feature> jFeature) {
- static auto method = Feature::javaClass.GetMethod<jni::Object<gson::JsonObject> ()>(env, "properties");
+ static auto javaClass = jni::Class<Feature>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::Object<gson::JsonObject> ()>(env, "properties");
return jFeature.Call(env, method);
}
jni::String Feature::id(jni::JNIEnv& env, jni::Object<Feature> jFeature) {
- static auto method = Feature::javaClass.GetMethod<jni::String ()>(env, "id");
+ static auto javaClass = jni::Class<Feature>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::String ()>(env, "id");
return jFeature.Call(env, method);
}
jni::Object<Feature> Feature::fromGeometry(jni::JNIEnv& env, jni::Object<Geometry> geometry, jni::Object<gson::JsonObject> properties, jni::String id) {
- static auto method = Feature::javaClass.GetStaticMethod<jni::Object<Feature> (jni::Object<Geometry>, jni::Object<gson::JsonObject>, jni::String)>(env, "fromGeometry");
- return Feature::javaClass.Call(env, method, geometry, properties, id);
+ static auto javaClass = jni::Class<Feature>::Singleton(env);
+ static auto method = javaClass.GetStaticMethod<jni::Object<Feature> (jni::Object<Geometry>, jni::Object<gson::JsonObject>, jni::String)>(env, "fromGeometry");
+ return javaClass.Call(env, method, geometry, properties, id);
}
void Feature::registerNative(jni::JNIEnv& env) {
- // Lookup the class
- Feature::javaClass = *jni::Class<Feature>::Find(env).NewGlobalRef(env).release();
+ jni::Class<Feature>::Singleton(env);
}
-jni::Class<Feature> Feature::javaClass;
-
} // namespace geojson
} // namespace android
} // namespace mbgl \ No newline at end of file