summaryrefslogtreecommitdiff
path: root/platform/android/src/geojson/line_string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/geojson/line_string.cpp')
-rw-r--r--platform/android/src/geojson/line_string.cpp30
1 files changed, 10 insertions, 20 deletions
diff --git a/platform/android/src/geojson/line_string.cpp b/platform/android/src/geojson/line_string.cpp
index a5f1a468ce..5a18a02bb7 100644
--- a/platform/android/src/geojson/line_string.cpp
+++ b/platform/android/src/geojson/line_string.cpp
@@ -8,22 +8,18 @@ namespace android {
namespace geojson {
jni::Object<LineString> LineString::New(jni::JNIEnv& env, const mbgl::LineString<double>& lineString) {
- auto jList = asPointsList(env, lineString);
-
+ static auto javaClass = jni::Class<LineString>::Singleton(env);
static auto method = javaClass.GetStaticMethod<jni::Object<LineString>(jni::Object<java::util::List>)>(env, "fromLngLats");
- auto jLineString = javaClass.Call(env, method, jList);
- jni::DeleteLocalRef(env, jList);
- return jLineString;
+ return javaClass.Call(env, method,
+ *jni::SeizeLocal(env, asPointsList(env, lineString)));
}
mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object<LineString> jLineString) {
mapbox::geojson::line_string lineString;
if (jLineString) {
- auto jPointList = LineString::coordinates(env, jLineString);
- lineString = LineString::convert(env, jPointList);
- jni::DeleteLocalRef(env, jPointList);
+ lineString = LineString::convert(env, *jni::SeizeLocal(env, LineString::coordinates(env, jLineString)));
}
return lineString;
@@ -33,34 +29,28 @@ mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object<j
mapbox::geojson::line_string lineString;
if (jPointList) {
- auto jPointArray = java::util::List::toArray<Point>(env, jPointList);
- auto size = jPointArray.Length(env);
+ auto jPointArray = jni::SeizeLocal(env, java::util::List::toArray<Point>(env, jPointList));
+ auto size = jPointArray->Length(env);
lineString.reserve(size);
for (std::size_t i = 0; i < size; i++) {
- auto jPoint = jPointArray.Get(env, i);
- lineString.push_back(Point::convert(env, jPoint));
- jni::DeleteLocalRef(env, jPoint);
+ lineString.push_back(Point::convert(env, *jni::SeizeLocal(env, jPointArray->Get(env, i))));
}
-
- jni::DeleteLocalRef(env, jPointArray);
}
return lineString;
}
jni::Object<java::util::List> LineString::coordinates(jni::JNIEnv &env, jni::Object<LineString> jLineString) {
- static auto method = LineString::javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates");
+ static auto javaClass = jni::Class<LineString>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates");
return jLineString.Call(env, method);
}
void LineString::registerNative(jni::JNIEnv &env) {
- // Lookup the class
- javaClass = *jni::Class<LineString>::Find(env).NewGlobalRef(env).release();
+ jni::Class<LineString>::Singleton(env);
}
-jni::Class<LineString> LineString::javaClass;
-
} // namespace geojson
} // namespace android
} // namespace mbgl \ No newline at end of file