diff options
Diffstat (limited to 'platform/android/src/geojson')
21 files changed, 155 insertions, 162 deletions
diff --git a/platform/android/src/geojson/feature.cpp b/platform/android/src/geojson/feature.cpp index 809ac42ef7..e79c238864 100644 --- a/platform/android/src/geojson/feature.cpp +++ b/platform/android/src/geojson/feature.cpp @@ -8,18 +8,18 @@ namespace geojson { using namespace gson; -mbgl::Feature Feature::convert(jni::JNIEnv& env, jni::Object<Feature> jFeature) { - static auto javaClass = jni::Class<Feature>::Singleton(env); +mbgl::Feature Feature::convert(jni::JNIEnv& env, const jni::Object<Feature>& jFeature) { + static auto& javaClass = jni::Class<Feature>::Singleton(env); static auto id = javaClass.GetMethod<jni::String ()>(env, "id"); static auto geometry = javaClass.GetMethod<jni::Object<Geometry> ()>(env, "geometry"); static auto properties = javaClass.GetMethod<jni::Object<gson::JsonObject> ()>(env, "properties"); - auto jId = jni::SeizeLocal(env, jFeature.Call(env, id)); + auto jId = jFeature.Call(env, id); return mbgl::Feature { - Geometry::convert(env, *jni::SeizeLocal(env, jFeature.Call(env, geometry))), - JsonObject::convert(env, *jni::SeizeLocal(env, jFeature.Call(env, properties))), - jId ? std::experimental::optional<mapbox::geometry::identifier>(jni::Make<std::string>(env, *jId)) + Geometry::convert(env, jFeature.Call(env, geometry)), + JsonObject::convert(env, jFeature.Call(env, properties)), + jId ? std::experimental::optional<mapbox::geometry::identifier>(jni::Make<std::string>(env, jId)) : std::experimental::nullopt }; } @@ -43,21 +43,21 @@ public: } }; -jni::Object<Feature> convertFeature(jni::JNIEnv& env, const mbgl::Feature& value) { - static auto javaClass = jni::Class<Feature>::Singleton(env); +jni::Local<jni::Object<Feature>> convertFeature(jni::JNIEnv& env, const mbgl::Feature& value) { + static auto& javaClass = jni::Class<Feature>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<Feature> (jni::Object<Geometry>, jni::Object<JsonObject>, jni::String)>(env, "fromGeometry"); return javaClass.Call(env, method, - *jni::SeizeLocal(env, Geometry::New(env, value.geometry)), - *jni::SeizeLocal(env, JsonObject::New(env, value.properties)), - *jni::SeizeLocal(env, jni::Make<jni::String>(env, value.id ? value.id.value().match(FeatureIdVisitor()) : ""))); + Geometry::New(env, value.geometry), + JsonObject::New(env, value.properties), + jni::Make<jni::String>(env, value.id ? value.id.value().match(FeatureIdVisitor()) : "")); } -jni::Array<jni::Object<Feature>> Feature::convert(jni::JNIEnv& env, const std::vector<mbgl::Feature>& value) { +jni::Local<jni::Array<jni::Object<Feature>>> Feature::convert(jni::JNIEnv& env, const std::vector<mbgl::Feature>& value) { auto features = jni::Array<jni::Object<Feature>>::New(env, value.size()); for (size_t i = 0; i < value.size(); i = i + 1) { - features.Set(env, i, *jni::SeizeLocal(env, convertFeature(env, value.at(i)))); + features.Set(env, i, convertFeature(env, value.at(i))); } return features; diff --git a/platform/android/src/geojson/feature.hpp b/platform/android/src/geojson/feature.hpp index fba4815e0c..fdf5d977ba 100644 --- a/platform/android/src/geojson/feature.hpp +++ b/platform/android/src/geojson/feature.hpp @@ -8,12 +8,12 @@ namespace mbgl { namespace android { namespace geojson { -class Feature : public jni::ObjectTag { +class Feature { public: static constexpr auto Name() { return "com/mapbox/geojson/Feature"; }; - static mbgl::Feature convert(jni::JNIEnv&, jni::Object<Feature>); - static jni::Array<jni::Object<Feature>> convert(jni::JNIEnv&, const std::vector<mbgl::Feature>&); + static mbgl::Feature convert(jni::JNIEnv&, const jni::Object<Feature>&); + static jni::Local<jni::Array<jni::Object<Feature>>> convert(jni::JNIEnv&, const std::vector<mbgl::Feature>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/feature_collection.cpp b/platform/android/src/geojson/feature_collection.cpp index c2825e037b..f90d5226b7 100644 --- a/platform/android/src/geojson/feature_collection.cpp +++ b/platform/android/src/geojson/feature_collection.cpp @@ -6,24 +6,24 @@ namespace mbgl { namespace android { namespace geojson { -mbgl::FeatureCollection FeatureCollection::convert(jni::JNIEnv& env, jni::Object<FeatureCollection> jCollection) { +mbgl::FeatureCollection FeatureCollection::convert(jni::JNIEnv& env, const jni::Object<FeatureCollection>& jCollection) { auto collection = mbgl::FeatureCollection(); if (jCollection) { - auto jFeatureList = jni::SeizeLocal(env, FeatureCollection::features(env, jCollection)); - auto jFeatures = jni::SeizeLocal(env, java::util::List::toArray<Feature>(env, *jFeatureList)); - auto size = size_t(jFeatures->Length(env)); + auto jFeatureList = FeatureCollection::features(env, jCollection); + auto jFeatures = java::util::List::toArray<Feature>(env, jFeatureList); + auto size = size_t(jFeatures.Length(env)); collection.reserve(size); for (size_t i = 0; i < size; i++) { - collection.push_back(Feature::convert(env, *jni::SeizeLocal(env, jFeatures->Get(env, i)))); + collection.push_back(Feature::convert(env, jFeatures.Get(env, i))); } } return collection; } -jni::Object<java::util::List> FeatureCollection::features(jni::JNIEnv& env, jni::Object<FeatureCollection> jCollection) { - static auto javaClass = jni::Class<FeatureCollection>::Singleton(env); +jni::Local<jni::Object<java::util::List>> FeatureCollection::features(jni::JNIEnv& env, const jni::Object<FeatureCollection>& jCollection) { + static auto& javaClass = jni::Class<FeatureCollection>::Singleton(env); static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "features"); return jCollection.Call(env, method); } diff --git a/platform/android/src/geojson/feature_collection.hpp b/platform/android/src/geojson/feature_collection.hpp index 1b45cca5de..66e92eacad 100644 --- a/platform/android/src/geojson/feature_collection.hpp +++ b/platform/android/src/geojson/feature_collection.hpp @@ -3,7 +3,6 @@ #include "../java/util.hpp" #include <mbgl/util/geojson.hpp> -#include <mbgl/util/noncopyable.hpp> #include <jni/jni.hpp> @@ -11,13 +10,13 @@ namespace mbgl { namespace android { namespace geojson { -class FeatureCollection : private mbgl::util::noncopyable { +class FeatureCollection { public: static constexpr auto Name() { return "com/mapbox/geojson/FeatureCollection"; }; - static mbgl::FeatureCollection convert(jni::JNIEnv&, jni::Object<FeatureCollection>); + static mbgl::FeatureCollection convert(jni::JNIEnv&, const jni::Object<FeatureCollection>&); - static jni::Object<java::util::List> features(jni::JNIEnv&, jni::Object<FeatureCollection>); + static jni::Local<jni::Object<java::util::List>> features(jni::JNIEnv&, const jni::Object<FeatureCollection>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/geometry.cpp b/platform/android/src/geojson/geometry.cpp index 4262b4ee69..2356af780a 100644 --- a/platform/android/src/geojson/geometry.cpp +++ b/platform/android/src/geojson/geometry.cpp @@ -22,65 +22,65 @@ public: jni::JNIEnv& env; - jni::Object<Geometry> operator()(const mbgl::Point<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::Point<double> &geometry) const { return Point::New(env, geometry); } - jni::Object<Geometry> operator()(const mbgl::LineString<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::LineString<double> &geometry) const { return LineString::New(env, geometry); } - jni::Object<Geometry> operator()(const mbgl::MultiLineString<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::MultiLineString<double> &geometry) const { return MultiLineString::New(env, geometry); } - jni::Object<Geometry> operator()(const mbgl::MultiPoint<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::MultiPoint<double> &geometry) const { return MultiPoint::New(env, geometry); } - jni::Object<Geometry> operator()(const mbgl::Polygon<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::Polygon<double> &geometry) const { return Polygon::New(env, geometry); } - jni::Object<Geometry> operator()(const mbgl::MultiPolygon<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mbgl::MultiPolygon<double> &geometry) const { return MultiPolygon::New(env, geometry); } - jni::Object<Geometry> operator()(const mapbox::geometry::geometry_collection<double> &geometry) const { + jni::Local<jni::Object<Geometry>> operator()(const mapbox::geometry::geometry_collection<double> &geometry) const { return GeometryCollection::New(env, geometry); } }; -jni::Object<Geometry> Geometry::New(jni::JNIEnv& env, mbgl::Geometry<double> geometry) { +jni::Local<jni::Object<Geometry>> Geometry::New(jni::JNIEnv& env, mbgl::Geometry<double> geometry) { GeometryEvaluator evaluator { env } ; return mbgl::Geometry<double>::visit(geometry, evaluator); } -mbgl::Geometry<double> Geometry::convert(jni::JNIEnv &env, jni::Object<Geometry> jGeometry) { +mbgl::Geometry<double> Geometry::convert(jni::JNIEnv &env, const jni::Object<Geometry>& jGeometry) { auto type = Geometry::getType(env, jGeometry); if (type == Point::Type()) { - return { Point::convert(env, jni::Object<Point>(jGeometry.Get())) }; + return { Point::convert(env, jni::Cast(env, jni::Class<Point>::Singleton(env), jGeometry)) }; } else if (type == MultiPoint::Type()) { - return { MultiPoint::convert(env, jni::Object<MultiPoint>(jGeometry.Get())) }; + return { MultiPoint::convert(env, jni::Cast(env, jni::Class<MultiPoint>::Singleton(env), jGeometry)) }; } else if (type == LineString::Type()) { - return { LineString::convert(env, jni::Object<LineString>(jGeometry.Get())) }; + return { LineString::convert(env, jni::Cast(env, jni::Class<LineString>::Singleton(env), jGeometry)) }; } else if (type == MultiLineString::Type()) { - return { MultiLineString::convert(env, jni::Object<MultiLineString>(jGeometry.Get())) }; + return { MultiLineString::convert(env, jni::Cast(env, jni::Class<MultiLineString>::Singleton(env), jGeometry)) }; } else if (type == Polygon::Type()) { - return { Polygon::convert(env, jni::Object<Polygon>(jGeometry.Get())) }; + return { Polygon::convert(env, jni::Cast(env, jni::Class<Polygon>::Singleton(env), jGeometry)) }; } else if (type == MultiPolygon::Type()) { - return { MultiPolygon::convert(env, jni::Object<MultiPolygon>(jGeometry.Get())) }; + return { MultiPolygon::convert(env, jni::Cast(env, jni::Class<MultiPolygon>::Singleton(env), jGeometry)) }; } else if (type == GeometryCollection::Type()) { - return { GeometryCollection::convert(env, jni::Object<GeometryCollection>(jGeometry.Get())) }; + return { GeometryCollection::convert(env, jni::Cast(env, jni::Class<GeometryCollection>::Singleton(env), jGeometry)) }; } throw std::runtime_error(std::string {"Unsupported GeoJSON type: " } + type); } -std::string Geometry::getType(jni::JNIEnv &env, jni::Object<Geometry> jGeometry) { - static auto javaClass = jni::Class<Geometry>::Singleton(env); +std::string Geometry::getType(jni::JNIEnv &env, const jni::Object<Geometry>& jGeometry) { + static auto& javaClass = jni::Class<Geometry>::Singleton(env); static auto method = javaClass.GetMethod<jni::String ()>(env, "type"); - return jni::Make<std::string>(env, *jni::SeizeLocal(env, jGeometry.Call(env, method))); + return jni::Make<std::string>(env, jGeometry.Call(env, method)); } void Geometry::registerNative(jni::JNIEnv &env) { diff --git a/platform/android/src/geojson/geometry.hpp b/platform/android/src/geojson/geometry.hpp index 836c3bd5a0..4bf55c858b 100644 --- a/platform/android/src/geojson/geometry.hpp +++ b/platform/android/src/geojson/geometry.hpp @@ -14,11 +14,11 @@ class Geometry { public: static constexpr auto Name() { return "com/mapbox/geojson/Geometry"; }; - static jni::Object<Geometry> New(jni::JNIEnv&, mbgl::Geometry<double>); + static jni::Local<jni::Object<Geometry>> New(jni::JNIEnv&, mbgl::Geometry<double>); - static mbgl::Geometry<double> convert(jni::JNIEnv&, jni::Object<Geometry>); + static mbgl::Geometry<double> convert(jni::JNIEnv&, const jni::Object<Geometry>&); - static std::string getType(jni::JNIEnv&, jni::Object<Geometry>); + static std::string getType(jni::JNIEnv&, const jni::Object<Geometry>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/geometry_collection.cpp b/platform/android/src/geojson/geometry_collection.cpp index ad0af71214..cca909126d 100644 --- a/platform/android/src/geojson/geometry_collection.cpp +++ b/platform/android/src/geojson/geometry_collection.cpp @@ -5,36 +5,34 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<GeometryCollection> GeometryCollection::New(jni::JNIEnv& env, const mapbox::geometry::geometry_collection<double>& collection) { +jni::Local<jni::Object<GeometryCollection>> GeometryCollection::New(jni::JNIEnv& env, const mapbox::geometry::geometry_collection<double>& collection) { // Create an array of geometries - auto jarray = jni::SeizeLocal(env, jni::Array<jni::Object<Geometry>>::New(env, collection.size())); + auto jarray = jni::Array<jni::Object<Geometry>>::New(env, collection.size()); for (size_t i = 0; i < collection.size(); i++) { - jarray->Set(env, i, *jni::SeizeLocal(env, Geometry::New(env, collection.at(i)))); + jarray.Set(env, i, Geometry::New(env, collection.at(i))); } // create the GeometryCollection - static auto javaClass = jni::Class<GeometryCollection>::Singleton(env); + static auto& javaClass = jni::Class<GeometryCollection>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<GeometryCollection> (jni::Object<java::util::List>)>(env, "fromGeometries"); - return javaClass.Call(env, method, *jni::SeizeLocal(env, java::util::Arrays::asList(env, *jarray))); + return javaClass.Call(env, method, java::util::Arrays::asList(env, jarray)); } -mapbox::geometry::geometry_collection<double> GeometryCollection::convert(jni::JNIEnv &env, jni::Object<GeometryCollection> jCollection) { +mapbox::geometry::geometry_collection<double> GeometryCollection::convert(jni::JNIEnv &env, const jni::Object<GeometryCollection>& jCollection) { // Get geometries - static auto javaClass = jni::Class<GeometryCollection>::Singleton(env); + static auto& javaClass = jni::Class<GeometryCollection>::Singleton(env); static auto getGeometries = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "geometries"); // Turn into array - auto jarray = jni::SeizeLocal(env, - java::util::List::toArray<Geometry>(env, - *jni::SeizeLocal(env, jCollection.Call(env, getGeometries)))); + auto jarray = java::util::List::toArray<Geometry>(env, jCollection.Call(env, getGeometries)); // Convert each geometry mapbox::geometry::geometry_collection<double> collection{}; - auto size = jarray->Length(env); + auto size = jarray.Length(env); for (jni::jsize i = 0; i < size; i++) { - collection.push_back(Geometry::convert(env, *jni::SeizeLocal(env, jarray->Get(env, i)))); + collection.push_back(Geometry::convert(env, jarray.Get(env, i))); } return collection; diff --git a/platform/android/src/geojson/geometry_collection.hpp b/platform/android/src/geojson/geometry_collection.hpp index a301d86933..9f02ac848d 100644 --- a/platform/android/src/geojson/geometry_collection.hpp +++ b/platform/android/src/geojson/geometry_collection.hpp @@ -8,15 +8,15 @@ namespace mbgl { namespace android { namespace geojson { -class GeometryCollection : public Geometry { +class GeometryCollection { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/GeometryCollection"; }; - static constexpr auto Type() { return "GeometryCollection"; }; - static jni::Object<GeometryCollection> New(jni::JNIEnv&, const mapbox::geometry::geometry_collection<double>&); + static jni::Local<jni::Object<GeometryCollection>> New(jni::JNIEnv&, const mapbox::geometry::geometry_collection<double>&); - static mapbox::geometry::geometry_collection<double> convert(jni::JNIEnv&, jni::Object<GeometryCollection>); + static mapbox::geometry::geometry_collection<double> convert(jni::JNIEnv&, const jni::Object<GeometryCollection>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/line_string.cpp b/platform/android/src/geojson/line_string.cpp index 5a18a02bb7..ae1345c958 100644 --- a/platform/android/src/geojson/line_string.cpp +++ b/platform/android/src/geojson/line_string.cpp @@ -7,42 +7,41 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<LineString> LineString::New(jni::JNIEnv& env, const mbgl::LineString<double>& lineString) { - static auto javaClass = jni::Class<LineString>::Singleton(env); +jni::Local<jni::Object<LineString>> LineString::New(jni::JNIEnv& env, const mbgl::LineString<double>& lineString) { + static auto& javaClass = jni::Class<LineString>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<LineString>(jni::Object<java::util::List>)>(env, "fromLngLats"); - return javaClass.Call(env, method, - *jni::SeizeLocal(env, asPointsList(env, lineString))); + return javaClass.Call(env, method, asPointsList(env, lineString)); } -mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object<LineString> jLineString) { +mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, const jni::Object<LineString>& jLineString) { mapbox::geojson::line_string lineString; if (jLineString) { - lineString = LineString::convert(env, *jni::SeizeLocal(env, LineString::coordinates(env, jLineString))); + lineString = LineString::convert(env, LineString::coordinates(env, jLineString)); } return lineString; } -mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, jni::Object<java::util::List/*<Point>*/> jPointList) { +mapbox::geojson::line_string LineString::convert(jni::JNIEnv &env, const jni::Object<java::util::List/*<Point>*/>& jPointList) { mapbox::geojson::line_string lineString; if (jPointList) { - auto jPointArray = jni::SeizeLocal(env, java::util::List::toArray<Point>(env, jPointList)); - auto size = jPointArray->Length(env); + auto jPointArray = java::util::List::toArray<Point>(env, jPointList); + auto size = jPointArray.Length(env); lineString.reserve(size); for (std::size_t i = 0; i < size; i++) { - lineString.push_back(Point::convert(env, *jni::SeizeLocal(env, jPointArray->Get(env, i)))); + lineString.push_back(Point::convert(env, jPointArray.Get(env, i))); } } return lineString; } -jni::Object<java::util::List> LineString::coordinates(jni::JNIEnv &env, jni::Object<LineString> jLineString) { - static auto javaClass = jni::Class<LineString>::Singleton(env); +jni::Local<jni::Object<java::util::List>> LineString::coordinates(jni::JNIEnv &env, const jni::Object<LineString>& jLineString) { + 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); } diff --git a/platform/android/src/geojson/line_string.hpp b/platform/android/src/geojson/line_string.hpp index 4df9349185..906d809fa8 100644 --- a/platform/android/src/geojson/line_string.hpp +++ b/platform/android/src/geojson/line_string.hpp @@ -14,19 +14,19 @@ namespace android { namespace geojson { -class LineString : public Geometry { +class LineString { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/LineString"; }; - static constexpr auto Type() { return "LineString"; }; - static jni::Object<LineString> New(jni::JNIEnv&, const mbgl::LineString<double>&); + static jni::Local<jni::Object<LineString>> New(jni::JNIEnv&, const mbgl::LineString<double>&); - static mapbox::geojson::line_string convert(jni::JNIEnv&, jni::Object<LineString>); + static mapbox::geojson::line_string convert(jni::JNIEnv&, const jni::Object<LineString>&); - static mapbox::geojson::line_string convert(jni::JNIEnv&, jni::Object<java::util::List/*<Point>*/>); + static mapbox::geojson::line_string convert(jni::JNIEnv&, const jni::Object<java::util::List/*<Point>*/>&); - static jni::Object<java::util::List> coordinates(jni::JNIEnv&, jni::Object<LineString>); + static jni::Local<jni::Object<java::util::List>> coordinates(jni::JNIEnv&, const jni::Object<LineString>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/multi_line_string.cpp b/platform/android/src/geojson/multi_line_string.cpp index 0a0974062c..1aaf53c01f 100644 --- a/platform/android/src/geojson/multi_line_string.cpp +++ b/platform/android/src/geojson/multi_line_string.cpp @@ -7,44 +7,42 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<MultiLineString> MultiLineString::New(jni::JNIEnv& env, const mbgl::MultiLineString<double>& multiLineString) { - static auto javaClass = jni::Class<MultiLineString>::Singleton(env); +jni::Local<jni::Object<MultiLineString>> MultiLineString::New(jni::JNIEnv& env, const mbgl::MultiLineString<double>& multiLineString) { + static auto& javaClass = jni::Class<MultiLineString>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<MultiLineString> (jni::Object<java::util::List>)>(env, "fromLngLats"); - return javaClass.Call(env, method, - *jni::SeizeLocal(env, asPointsListsList(env, multiLineString))); + return javaClass.Call(env, method, asPointsListsList(env, multiLineString)); } -mapbox::geojson::multi_line_string MultiLineString::convert(jni::JNIEnv &env, jni::Object<MultiLineString> jMultiLineString) { +mapbox::geojson::multi_line_string MultiLineString::convert(jni::JNIEnv &env, const jni::Object<MultiLineString>& jMultiLineString) { mapbox::geojson::multi_line_string multiLineString; if (jMultiLineString) { - multiLineString = MultiLineString::convert(env, - *jni::SeizeLocal(env, MultiLineString::coordinates(env, jMultiLineString))); + multiLineString = MultiLineString::convert(env, MultiLineString::coordinates(env, jMultiLineString)); } return multiLineString; } -mapbox::geojson::multi_line_string MultiLineString::convert(jni::JNIEnv &env, jni::Object<java::util::List/*<java::util::List<Point>>*/> jPointListsList) { +mapbox::geojson::multi_line_string MultiLineString::convert(jni::JNIEnv &env, const jni::Object<java::util::List/*<java::util::List<Point>>*/>& jPointListsList) { mapbox::geojson::multi_line_string multiLineString; if (jPointListsList) { - auto jPositionListsArray = jni::SeizeLocal(env, java::util::List::toArray<java::util::List>(env, jPointListsList)); + auto jPositionListsArray = java::util::List::toArray<java::util::List>(env, jPointListsList); - auto size = jPositionListsArray->Length(env); + auto size = jPositionListsArray.Length(env); multiLineString.reserve(size); for (std::size_t i = 0; i < size; i++) { - multiLineString.push_back(LineString::convert(env, *jni::SeizeLocal(env, jPositionListsArray->Get(env, i)))); + multiLineString.push_back(LineString::convert(env, jPositionListsArray.Get(env, i))); } } return multiLineString; } -jni::Object<java::util::List> MultiLineString::coordinates(jni::JNIEnv &env, jni::Object<MultiLineString> jLineString) { - static auto javaClass = jni::Class<MultiLineString>::Singleton(env); +jni::Local<jni::Object<java::util::List>> MultiLineString::coordinates(jni::JNIEnv &env, const jni::Object<MultiLineString>& jLineString) { + static auto& javaClass = jni::Class<MultiLineString>::Singleton(env); static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates"); return jLineString.Call(env, method); } diff --git a/platform/android/src/geojson/multi_line_string.hpp b/platform/android/src/geojson/multi_line_string.hpp index c66aadaf03..65ce43bd1f 100644 --- a/platform/android/src/geojson/multi_line_string.hpp +++ b/platform/android/src/geojson/multi_line_string.hpp @@ -12,19 +12,19 @@ namespace mbgl { namespace android { namespace geojson { -class MultiLineString : public Geometry { +class MultiLineString { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/MultiLineString"; }; - static constexpr auto Type() { return "MultiLineString"; }; - static jni::Object<MultiLineString> New(jni::JNIEnv&, const mbgl::MultiLineString<double>&); + static jni::Local<jni::Object<MultiLineString>> New(jni::JNIEnv&, const mbgl::MultiLineString<double>&); - static mapbox::geojson::multi_line_string convert(jni::JNIEnv&, jni::Object<MultiLineString>); + static mapbox::geojson::multi_line_string convert(jni::JNIEnv&, const jni::Object<MultiLineString>&); - static mapbox::geojson::multi_line_string convert(jni::JNIEnv&, jni::Object<java::util::List/*<java::util::List<Point>>*/>); + static mapbox::geojson::multi_line_string convert(jni::JNIEnv&, const jni::Object<java::util::List/*<java::util::List<Point>>*/>&); - static jni::Object<java::util::List> coordinates(jni::JNIEnv&, jni::Object<MultiLineString>); + static jni::Local<jni::Object<java::util::List>> coordinates(jni::JNIEnv&, const jni::Object<MultiLineString>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/multi_point.cpp b/platform/android/src/geojson/multi_point.cpp index 5f51058f38..d530ef721f 100644 --- a/platform/android/src/geojson/multi_point.cpp +++ b/platform/android/src/geojson/multi_point.cpp @@ -8,26 +8,26 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<MultiPoint> MultiPoint::New(JNIEnv& env, const mbgl::MultiPoint<double>& multiPoint) { - static auto javaClass = jni::Class<MultiPoint>::Singleton(env); +jni::Local<jni::Object<MultiPoint>> MultiPoint::New(JNIEnv& env, const mbgl::MultiPoint<double>& multiPoint) { + static auto& javaClass = jni::Class<MultiPoint>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<MultiPoint>(jni::Object<java::util::List>)>(env, "fromLngLats"); - return javaClass.Call(env, method, *jni::SeizeLocal(env, asPointsList(env, multiPoint))); + return javaClass.Call(env, method, asPointsList(env, multiPoint)); } -mapbox::geojson::multi_point MultiPoint::convert(jni::JNIEnv &env, jni::Object<MultiPoint> jMultiPoint) { +mapbox::geojson::multi_point MultiPoint::convert(jni::JNIEnv& env, const jni::Object<MultiPoint>& jMultiPoint) { mapbox::geojson::multi_point multiPoint; if (jMultiPoint) { multiPoint = convertExplicit<mapbox::geojson::multi_point>( - LineString::convert(env, *jni::SeizeLocal(env, MultiPoint::coordinates(env, jMultiPoint)))); + LineString::convert(env, MultiPoint::coordinates(env, jMultiPoint))); } return multiPoint; } -jni::Object<java::util::List> MultiPoint::coordinates(jni::JNIEnv &env, jni::Object<MultiPoint> jMultiPoint) { - static auto javaClass = jni::Class<MultiPoint>::Singleton(env); +jni::Local<jni::Object<java::util::List>> MultiPoint::coordinates(jni::JNIEnv& env, const jni::Object<MultiPoint>& jMultiPoint) { + static auto& javaClass = jni::Class<MultiPoint>::Singleton(env); static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates"); return jMultiPoint.Call(env, method); } diff --git a/platform/android/src/geojson/multi_point.hpp b/platform/android/src/geojson/multi_point.hpp index 0df16bfd6a..a3ca49b731 100644 --- a/platform/android/src/geojson/multi_point.hpp +++ b/platform/android/src/geojson/multi_point.hpp @@ -13,17 +13,17 @@ namespace mbgl { namespace android { namespace geojson { -class MultiPoint : public Geometry { +class MultiPoint { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/MultiPoint"; }; - static constexpr auto Type() { return "MultiPoint"; }; - static jni::Object<MultiPoint> New(jni::JNIEnv&, const mbgl::MultiPoint<double>&); + static jni::Local<jni::Object<MultiPoint>> New(jni::JNIEnv&, const mbgl::MultiPoint<double>&); - static mapbox::geojson::multi_point convert(jni::JNIEnv&, jni::Object<MultiPoint>); + static mapbox::geojson::multi_point convert(jni::JNIEnv&, const jni::Object<MultiPoint>&); - static jni::Object<java::util::List> coordinates(jni::JNIEnv&, jni::Object<MultiPoint>); + static jni::Local<jni::Object<java::util::List>> coordinates(jni::JNIEnv&, const jni::Object<MultiPoint>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/multi_polygon.cpp b/platform/android/src/geojson/multi_polygon.cpp index 109ac714c3..3c5c3ec338 100644 --- a/platform/android/src/geojson/multi_polygon.cpp +++ b/platform/android/src/geojson/multi_polygon.cpp @@ -7,41 +7,39 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<MultiPolygon> MultiPolygon::New(JNIEnv& env, const mbgl::MultiPolygon<double>& multiPolygon) { - static auto javaClass = jni::Class<MultiPolygon>::Singleton(env); +jni::Local<jni::Object<MultiPolygon>> MultiPolygon::New(JNIEnv& env, const mbgl::MultiPolygon<double>& multiPolygon) { + static auto& javaClass = jni::Class<MultiPolygon>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<MultiPolygon> (jni::Object<java::util::List>)>(env, "fromLngLats"); - auto jarray = jni::SeizeLocal(env, - jni::Array<jni::Object<java::util::List>>::New(env, multiPolygon.size())); + auto jarray = jni::Array<jni::Object<java::util::List>>::New(env, multiPolygon.size()); for (size_t i = 0; i < multiPolygon.size(); i++) { - jarray->Set(env, i, *jni::SeizeLocal(env, asPointsListsList(env, multiPolygon.at(i)))); + jarray.Set(env, i, asPointsListsList(env, multiPolygon.at(i))); } - return javaClass.Call(env, method, - *jni::SeizeLocal(env, java::util::Arrays::asList(env, *jarray))); + return javaClass.Call(env, method, java::util::Arrays::asList(env, jarray)); } -mapbox::geojson::multi_polygon MultiPolygon::convert(jni::JNIEnv &env, jni::Object<MultiPolygon> jMultiPolygon) { +mapbox::geojson::multi_polygon MultiPolygon::convert(jni::JNIEnv& env, const jni::Object<MultiPolygon>& jMultiPolygon) { mapbox::geojson::multi_polygon multiPolygon; if (jMultiPolygon) { - auto jPointListsListList = jni::SeizeLocal(env, MultiPolygon::coordinates(env, jMultiPolygon)); - auto jPointListsListArray = jni::SeizeLocal(env, java::util::List::toArray<java::util::List>(env, *jPointListsListList)); + auto jPointListsListList = MultiPolygon::coordinates(env, jMultiPolygon); + auto jPointListsListArray = java::util::List::toArray<java::util::List>(env, jPointListsListList); - auto size = jPointListsListArray->Length(env); + auto size = jPointListsListArray.Length(env); multiPolygon.reserve(size); for (size_t i = 0; i < size; i++) { - multiPolygon.push_back(Polygon::convert(env, *jni::SeizeLocal(env, jPointListsListArray->Get(env, i)))); + multiPolygon.push_back(Polygon::convert(env, jPointListsListArray.Get(env, i))); } } return multiPolygon; } -jni::Object<java::util::List> MultiPolygon::coordinates(jni::JNIEnv &env, jni::Object<MultiPolygon> jPolygon) { - static auto javaClass = jni::Class<MultiPolygon>::Singleton(env); +jni::Local<jni::Object<java::util::List>> MultiPolygon::coordinates(jni::JNIEnv& env, const jni::Object<MultiPolygon>& jPolygon) { + static auto& javaClass = jni::Class<MultiPolygon>::Singleton(env); static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates"); return jPolygon.Call(env, method); } diff --git a/platform/android/src/geojson/multi_polygon.hpp b/platform/android/src/geojson/multi_polygon.hpp index 3477e989ea..fd7b08016d 100644 --- a/platform/android/src/geojson/multi_polygon.hpp +++ b/platform/android/src/geojson/multi_polygon.hpp @@ -12,17 +12,17 @@ namespace mbgl { namespace android { namespace geojson { -class MultiPolygon : public Geometry { +class MultiPolygon { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/MultiPolygon"; }; - static constexpr auto Type() { return "MultiPolygon"; }; - static jni::Object<MultiPolygon> New(jni::JNIEnv&, const mbgl::MultiPolygon<double>&); + static jni::Local<jni::Object<MultiPolygon>> New(jni::JNIEnv&, const mbgl::MultiPolygon<double>&); - static mapbox::geojson::multi_polygon convert(jni::JNIEnv&, jni::Object<MultiPolygon>); + static mapbox::geojson::multi_polygon convert(jni::JNIEnv&, const jni::Object<MultiPolygon>&); - static jni::Object<java::util::List> coordinates(jni::JNIEnv&, jni::Object<MultiPolygon>); + static jni::Local<jni::Object<java::util::List>> coordinates(jni::JNIEnv&, const jni::Object<MultiPolygon>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/point.cpp b/platform/android/src/geojson/point.cpp index 7fcc183dc1..2000447c0f 100644 --- a/platform/android/src/geojson/point.cpp +++ b/platform/android/src/geojson/point.cpp @@ -4,14 +4,14 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<Point> Point::New(jni::JNIEnv& env, const mbgl::Point<double>& point) { - static auto javaClass = jni::Class<Point>::Singleton(env); +jni::Local<jni::Object<Point>> Point::New(jni::JNIEnv& env, const mbgl::Point<double>& point) { + static auto& javaClass = jni::Class<Point>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<Point> (jni::jdouble, jni::jdouble)>(env, "fromLngLat"); return javaClass.Call(env, method, point.x, point.y); } -mbgl::Point<double> Point::convert(jni::JNIEnv &env, jni::Object<Point> jPoint) { - static auto javaClass = jni::Class<Point>::Singleton(env); +mbgl::Point<double> Point::convert(jni::JNIEnv &env, const jni::Object<Point>& jPoint) { + static auto& javaClass = jni::Class<Point>::Singleton(env); static auto longitude = javaClass.GetMethod<jni::jdouble ()>(env, "longitude"); static auto latitude = javaClass.GetMethod<jni::jdouble ()>(env, "latitude"); diff --git a/platform/android/src/geojson/point.hpp b/platform/android/src/geojson/point.hpp index d5cc7780f3..b5d71ecae1 100644 --- a/platform/android/src/geojson/point.hpp +++ b/platform/android/src/geojson/point.hpp @@ -10,13 +10,14 @@ namespace mbgl { namespace android { namespace geojson { -class Point : public Geometry { +class Point { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/Point"; }; static constexpr auto Type() { return "Point"; }; - static jni::Object<Point> New(jni::JNIEnv&, const mbgl::Point<double>&); - static mbgl::Point<double> convert(jni::JNIEnv&, jni::Object<Point>); + static jni::Local<jni::Object<Point>> New(jni::JNIEnv&, const mbgl::Point<double>&); + static mbgl::Point<double> convert(jni::JNIEnv&, const jni::Object<Point>&); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/geojson/polygon.cpp b/platform/android/src/geojson/polygon.cpp index add843e294..4437d134a8 100644 --- a/platform/android/src/geojson/polygon.cpp +++ b/platform/android/src/geojson/polygon.cpp @@ -8,24 +8,24 @@ namespace mbgl { namespace android { namespace geojson { -jni::Object<Polygon> Polygon::New(jni::JNIEnv& env, const mbgl::Polygon<double>& polygon) { - static auto javaClass = jni::Class<Polygon>::Singleton(env); +jni::Local<jni::Object<Polygon>> Polygon::New(jni::JNIEnv& env, const mbgl::Polygon<double>& polygon) { + static auto& javaClass = jni::Class<Polygon>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<Polygon> (jni::Object<java::util::List>)>(env, "fromLngLats"); - return javaClass.Call(env, method, *jni::SeizeLocal(env, asPointsListsList(env, polygon))); + return javaClass.Call(env, method, asPointsListsList(env, polygon)); } -mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object<Polygon> jPolygon) { +mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, const jni::Object<Polygon>& jPolygon) { mapbox::geojson::polygon polygon; if (jPolygon) { - polygon = Polygon::convert(env, *jni::SeizeLocal(env, Polygon::coordinates(env, jPolygon))); + polygon = Polygon::convert(env, Polygon::coordinates(env, jPolygon)); } return polygon; } -mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object<java::util::List/*<java::util::List<Point>>*/> jPointListsList) { +mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, const jni::Object<java::util::List/*<java::util::List<Point>>*/>& jPointListsList) { mapbox::geojson::polygon polygon; if (jPointListsList) { @@ -40,8 +40,8 @@ mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object<java::ut } -jni::Object<java::util::List> Polygon::coordinates(jni::JNIEnv &env, jni::Object<Polygon> jPolygon) { - static auto javaClass = jni::Class<Polygon>::Singleton(env); +jni::Local<jni::Object<java::util::List>> Polygon::coordinates(jni::JNIEnv &env, const jni::Object<Polygon>& jPolygon) { + static auto& javaClass = jni::Class<Polygon>::Singleton(env); static auto method = javaClass.GetMethod<jni::Object<java::util::List> ()>(env, "coordinates"); return jPolygon.Call(env, method); } diff --git a/platform/android/src/geojson/polygon.hpp b/platform/android/src/geojson/polygon.hpp index adfa60df4d..8e1761feda 100644 --- a/platform/android/src/geojson/polygon.hpp +++ b/platform/android/src/geojson/polygon.hpp @@ -13,19 +13,19 @@ namespace mbgl { namespace android { namespace geojson { -class Polygon : public Geometry { +class Polygon { public: + using SuperTag = Geometry; static constexpr auto Name() { return "com/mapbox/geojson/Polygon"; }; - static constexpr auto Type() { return "Polygon"; }; - static jni::Object<Polygon> New(jni::JNIEnv&, const mbgl::Polygon<double>&); + static jni::Local<jni::Object<Polygon>> New(jni::JNIEnv&, const mbgl::Polygon<double>&); - static mapbox::geojson::polygon convert(jni::JNIEnv &, jni::Object<Polygon>); + static mapbox::geojson::polygon convert(jni::JNIEnv &, const jni::Object<Polygon>&); - static mapbox::geojson::polygon convert(jni::JNIEnv&, jni::Object<java::util::List/*<java::util::List<Point>>*/>); + static mapbox::geojson::polygon convert(jni::JNIEnv&, const jni::Object<java::util::List/*<java::util::List<Point>>*/>&); - static jni::Object<java::util::List> coordinates(jni::JNIEnv&, jni::Object<Polygon>); + static jni::Local<jni::Object<java::util::List>> coordinates(jni::JNIEnv&, const jni::Object<Polygon>&); static void registerNative(jni::JNIEnv &); }; diff --git a/platform/android/src/geojson/util.hpp b/platform/android/src/geojson/util.hpp index e889931c56..59154516fa 100644 --- a/platform/android/src/geojson/util.hpp +++ b/platform/android/src/geojson/util.hpp @@ -23,28 +23,28 @@ To convertExplicit(From&& src) { * Geometry -> List<Point> */ template <class T> -static jni::Object<java::util::List> asPointsList(jni::JNIEnv& env, const T& pointsList) { - auto jarray = jni::SeizeLocal(env, jni::Array<jni::Object<Point>>::New(env, pointsList.size())); +static jni::Local<jni::Object<java::util::List>> asPointsList(jni::JNIEnv& env, const T& pointsList) { + auto jarray = jni::Array<jni::Object<Point>>::New(env, pointsList.size()); for (jni::jsize i = 0; i < pointsList.size(); i++) { - jarray->Set(env, i, *jni::SeizeLocal(env, Point::New(env, pointsList.at(i)))); + jarray.Set(env, i, Point::New(env, pointsList.at(i))); } - return java::util::Arrays::asList(env, *jarray); + return java::util::Arrays::asList(env, jarray); } /** * Geometry -> List<List<Point>> */ template <class SHAPE> -static jni::Object<java::util::List> asPointsListsList(JNIEnv& env, SHAPE value) { - auto jarray = jni::SeizeLocal(env, jni::Array<jni::Object<java::util::List>>::New(env, value.size())); +static jni::Local<jni::Object<java::util::List>> asPointsListsList(JNIEnv& env, const SHAPE& value) { + auto jarray = jni::Array<jni::Object<java::util::List>>::New(env, value.size()); for (size_t i = 0; i < value.size(); i++) { - jarray->Set(env, i, *jni::SeizeLocal(env, asPointsList(env, value[i]))); + jarray.Set(env, i, asPointsList(env, value[i])); } - return java::util::Arrays::asList(env, *jarray); + return java::util::Arrays::asList(env, jarray); } } // namespace geojson |