summaryrefslogtreecommitdiff
path: root/platform/android/src/style/sources
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style/sources')
-rw-r--r--platform/android/src/style/sources/custom_geometry_source.cpp56
-rw-r--r--platform/android/src/style/sources/custom_geometry_source.hpp18
-rw-r--r--platform/android/src/style/sources/geojson_source.cpp53
-rw-r--r--platform/android/src/style/sources/geojson_source.hpp25
-rw-r--r--platform/android/src/style/sources/image_source.cpp22
-rw-r--r--platform/android/src/style/sources/image_source.hpp14
-rw-r--r--platform/android/src/style/sources/raster_dem_source.cpp18
-rw-r--r--platform/android/src/style/sources/raster_dem_source.hpp7
-rw-r--r--platform/android/src/style/sources/raster_source.cpp18
-rw-r--r--platform/android/src/style/sources/raster_source.hpp7
-rw-r--r--platform/android/src/style/sources/source.cpp25
-rw-r--r--platform/android/src/style/sources/source.hpp12
-rw-r--r--platform/android/src/style/sources/unknown_source.cpp8
-rw-r--r--platform/android/src/style/sources/unknown_source.hpp4
-rw-r--r--platform/android/src/style/sources/vector_source.cpp26
-rw-r--r--platform/android/src/style/sources/vector_source.hpp11
16 files changed, 165 insertions, 159 deletions
diff --git a/platform/android/src/style/sources/custom_geometry_source.cpp b/platform/android/src/style/sources/custom_geometry_source.cpp
index 9012948b0b..057f5c99ba 100644
--- a/platform/android/src/style/sources/custom_geometry_source.cpp
+++ b/platform/android/src/style/sources/custom_geometry_source.cpp
@@ -1,4 +1,5 @@
#include "custom_geometry_source.hpp"
+#include "../../attach_env.hpp"
#include <mbgl/renderer/query.hpp>
@@ -21,7 +22,7 @@ namespace android {
// the value was originally a CustomGeometrySourceOptions object on the Java side. If it fails
// to convert, it's a bug in our serialization or Java-side static typing.
static style::CustomGeometrySource::Options convertCustomGeometrySourceOptions(jni::JNIEnv& env,
- jni::Local<jni::Object<>> options,
+ const jni::Object<>& options,
style::TileFunction fetchFn,
style::TileFunction cancelFn) {
using namespace mbgl::style::conversion;
@@ -29,7 +30,7 @@ namespace android {
return style::CustomGeometrySource::Options();
}
Error error;
- optional<style::CustomGeometrySource::Options> result = convert<style::CustomGeometrySource::Options>(Value(env, std::move(options)), error);
+ optional<style::CustomGeometrySource::Options> result = convert<style::CustomGeometrySource::Options>(Value(env, options), error);
if (!result) {
throw std::logic_error(error.message);
}
@@ -39,11 +40,11 @@ namespace android {
}
CustomGeometrySource::CustomGeometrySource(jni::JNIEnv& env,
- jni::String sourceId,
- jni::Object<> options)
+ const jni::String& sourceId,
+ const jni::Object<>& options)
: Source(env, std::make_unique<mbgl::style::CustomGeometrySource>(
jni::Make<std::string>(env, sourceId),
- convertCustomGeometrySourceOptions(env, jni::SeizeLocal(env, std::move(options)),
+ convertCustomGeometrySourceOptions(env, options,
std::bind(&CustomGeometrySource::fetchTile, this, std::placeholders::_1),
std::bind(&CustomGeometrySource::cancelTile, this, std::placeholders::_1)))) {
}
@@ -61,48 +62,48 @@ namespace android {
void CustomGeometrySource::fetchTile (const mbgl::CanonicalTileID& tileID) {
android::UniqueEnv _env = android::AttachEnv();
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto fetchTile = javaClass.GetMethod<void (jni::jint, jni::jint, jni::jint)>(*_env, "fetchTile");
assert(javaPeer);
- auto peer = jni::Cast(*_env, javaClass, *javaPeer);
+ auto peer = jni::Cast(*_env, javaClass, javaPeer);
peer.Call(*_env, fetchTile, (int)tileID.z, (int)tileID.x, (int)tileID.y);
};
void CustomGeometrySource::cancelTile(const mbgl::CanonicalTileID& tileID) {
android::UniqueEnv _env = android::AttachEnv();
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto cancelTile = javaClass.GetMethod<void (jni::jint, jni::jint, jni::jint)>(*_env, "cancelTile");
assert(javaPeer);
- auto peer = jni::Cast(*_env, javaClass, *javaPeer);
+ auto peer = jni::Cast(*_env, javaClass, javaPeer);
peer.Call(*_env, cancelTile, (int)tileID.z, (int)tileID.x, (int)tileID.y);
};
void CustomGeometrySource::startThreads() {
android::UniqueEnv _env = android::AttachEnv();
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto startThreads = javaClass.GetMethod<void ()>(*_env, "startThreads");
assert(javaPeer);
- auto peer = jni::Cast(*_env, javaClass, *javaPeer);
+ auto peer = jni::Cast(*_env, javaClass, javaPeer);
peer.Call(*_env, startThreads);
}
void CustomGeometrySource::releaseThreads() {
android::UniqueEnv _env = android::AttachEnv();
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto releaseThreads = javaClass.GetMethod<void ()>(*_env, "releaseThreads");
assert(javaPeer);
- auto peer = jni::Cast(*_env, javaClass, *javaPeer);
+ auto peer = jni::Cast(*_env, javaClass, javaPeer);
peer.Call(*_env, releaseThreads);
};
@@ -111,12 +112,12 @@ namespace android {
jni::jint y) {
android::UniqueEnv _env = android::AttachEnv();
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(*_env);
static auto isCancelled = javaClass.GetMethod<jboolean (jni::jint, jni::jint, jni::jint)>(*_env, "isCancelled");
assert(javaPeer);
- auto peer = jni::Cast(*_env, javaClass, *javaPeer);
+ auto peer = jni::Cast(*_env, javaClass, javaPeer);
return peer.Call(*_env, isCancelled, z, x, y);
};
@@ -124,7 +125,7 @@ namespace android {
jni::jint z,
jni::jint x,
jni::jint y,
- jni::Object<geojson::FeatureCollection> jFeatures) {
+ const jni::Object<geojson::FeatureCollection>& jFeatures) {
using namespace mbgl::android::geojson;
// Convert the jni object
@@ -140,36 +141,35 @@ namespace android {
source.as<mbgl::style::CustomGeometrySource>()->CustomGeometrySource::invalidateTile(CanonicalTileID(z, x, y));
}
- void CustomGeometrySource::invalidateBounds(jni::JNIEnv& env, jni::Object<LatLngBounds> jBounds) {
+ void CustomGeometrySource::invalidateBounds(jni::JNIEnv& env, const jni::Object<LatLngBounds>& jBounds) {
auto bounds = LatLngBounds::getLatLngBounds(env, jBounds);
source.as<mbgl::style::CustomGeometrySource>()->CustomGeometrySource::invalidateRegion(bounds);
}
- jni::Array<jni::Object<geojson::Feature>> CustomGeometrySource::querySourceFeatures(jni::JNIEnv& env,
- jni::Array<jni::Object<>> jfilter) {
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> CustomGeometrySource::querySourceFeatures(jni::JNIEnv& env,
+ const jni::Array<jni::Object<>>& jfilter) {
using namespace mbgl::android::conversion;
using namespace mbgl::android::geojson;
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
- features = rendererFrontend->querySourceFeatures(source.getID(),
- { {}, toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
+ features = rendererFrontend->querySourceFeatures(source.getID(), { {}, toFilter(env, jfilter) });
}
return Feature::convert(env, features);
}
- jni::Object<Source> CustomGeometrySource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
+ jni::Local<jni::Object<Source>> CustomGeometrySource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
- void CustomGeometrySource::addToMap(JNIEnv& env, jni::Object<Source> obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
+ void CustomGeometrySource::addToMap(JNIEnv& env, const jni::Object<Source>& obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
Source::addToMap(env, obj, map, frontend);
startThreads();
}
- bool CustomGeometrySource::removeFromMap(JNIEnv& env, jni::Object<Source> source, mbgl::Map& map) {
+ bool CustomGeometrySource::removeFromMap(JNIEnv& env, const jni::Object<Source>& source, mbgl::Map& map) {
bool successfullyRemoved = Source::removeFromMap(env, source, map);
if (successfullyRemoved) {
releaseThreads();
@@ -179,14 +179,14 @@ namespace android {
void CustomGeometrySource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
+ static auto& javaClass = jni::Class<CustomGeometrySource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<CustomGeometrySource>(
env, javaClass, "nativePtr",
- std::make_unique<CustomGeometrySource, JNIEnv&, jni::String, jni::Object<>>,
+ jni::MakePeer<CustomGeometrySource, const jni::String&, const jni::Object<>&>,
"initialize",
"finalize",
METHOD(&CustomGeometrySource::querySourceFeatures, "querySourceFeatures"),
diff --git a/platform/android/src/style/sources/custom_geometry_source.hpp b/platform/android/src/style/sources/custom_geometry_source.hpp
index ecfadd659c..52e4027dd8 100644
--- a/platform/android/src/style/sources/custom_geometry_source.hpp
+++ b/platform/android/src/style/sources/custom_geometry_source.hpp
@@ -15,17 +15,17 @@ namespace android {
class CustomGeometrySource : public Source {
public:
-
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/CustomGeometrySource"; };
static void registerNative(jni::JNIEnv&);
- CustomGeometrySource(jni::JNIEnv&, jni::String, jni::Object<>);
+ CustomGeometrySource(jni::JNIEnv&, const jni::String&, const jni::Object<>&);
CustomGeometrySource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~CustomGeometrySource();
- bool removeFromMap(JNIEnv&, jni::Object<Source>, mbgl::Map&) override;
- void addToMap(JNIEnv&, jni::Object<Source>, mbgl::Map&, AndroidRendererFrontend&) override;
+ bool removeFromMap(JNIEnv&, const jni::Object<Source>&, mbgl::Map&) override;
+ void addToMap(JNIEnv&, const jni::Object<Source>&, mbgl::Map&, AndroidRendererFrontend&) override;
void fetchTile(const mbgl::CanonicalTileID& tileID);
void cancelTile(const mbgl::CanonicalTileID& tileID);
@@ -34,15 +34,15 @@ public:
void releaseThreads();
private:
- void setTileData(jni::JNIEnv& env, jni::jint z, jni::jint x, jni::jint y, jni::Object<geojson::FeatureCollection> jf);
+ void setTileData(jni::JNIEnv& env, jni::jint z, jni::jint x, jni::jint y, const jni::Object<geojson::FeatureCollection>& jf);
void invalidateTile(jni::JNIEnv& env, jni::jint z, jni::jint x, jni::jint y);
- void invalidateBounds(jni::JNIEnv& env, jni::Object<LatLngBounds> bounds);
+ void invalidateBounds(jni::JNIEnv& env, const jni::Object<LatLngBounds>& bounds);
- jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&,
- jni::Array<jni::Object<>> );
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> querySourceFeatures(jni::JNIEnv&,
+ const jni::Array<jni::Object<>>& );
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class CustomGeometrySource
diff --git a/platform/android/src/style/sources/geojson_source.cpp b/platform/android/src/style/sources/geojson_source.cpp
index 943cc48386..d0ad5fb699 100644
--- a/platform/android/src/style/sources/geojson_source.cpp
+++ b/platform/android/src/style/sources/geojson_source.cpp
@@ -1,4 +1,5 @@
#include "geojson_source.hpp"
+#include "../../attach_env.hpp"
#include <mbgl/renderer/query.hpp>
@@ -29,24 +30,24 @@ namespace android {
// This conversion is expected not to fail because it's used only in contexts where
// the value was originally a GeoJsonOptions object on the Java side. If it fails
// to convert, it's a bug in our serialization or Java-side static typing.
- static style::GeoJSONOptions convertGeoJSONOptions(jni::JNIEnv& env, jni::Local<jni::Object<>> options) {
+ static style::GeoJSONOptions convertGeoJSONOptions(jni::JNIEnv& env, const jni::Object<>& options) {
using namespace mbgl::style::conversion;
if (!options) {
return style::GeoJSONOptions();
}
Error error;
optional<style::GeoJSONOptions> result = convert<style::GeoJSONOptions>(
- mbgl::android::Value(env, std::move(options)), error);
+ mbgl::android::Value(env, options), error);
if (!result) {
throw std::logic_error(error.message);
}
return *result;
}
- GeoJSONSource::GeoJSONSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> options)
+ GeoJSONSource::GeoJSONSource(jni::JNIEnv& env, const jni::String& sourceId, const jni::Object<>& options)
: Source(env, std::make_unique<mbgl::style::GeoJSONSource>(
jni::Make<std::string>(env, sourceId),
- convertGeoJSONOptions(env, jni::SeizeLocal(env, std::move(options)))))
+ convertGeoJSONOptions(env, options)))
, threadPool(sharedThreadPool())
, converter(std::make_unique<Actor<FeatureConverter>>(*threadPool)) {
}
@@ -61,7 +62,7 @@ namespace android {
GeoJSONSource::~GeoJSONSource() = default;
- void GeoJSONSource::setGeoJSONString(jni::JNIEnv& env, jni::String jString) {
+ void GeoJSONSource::setGeoJSONString(jni::JNIEnv& env, const jni::String& jString) {
std::shared_ptr<std::string> json = std::make_shared<std::string>(jni::Make<std::string>(env, jString));
@@ -72,54 +73,54 @@ namespace android {
setAsync(converterFn);
}
- void GeoJSONSource::setFeatureCollection(jni::JNIEnv& env, jni::Object<geojson::FeatureCollection> jFeatures) {
+ void GeoJSONSource::setFeatureCollection(jni::JNIEnv& env, const jni::Object<geojson::FeatureCollection>& jFeatures) {
setCollectionAsync(env, jFeatures);
}
- void GeoJSONSource::setFeature(jni::JNIEnv& env, jni::Object<geojson::Feature> jFeature) {
+ void GeoJSONSource::setFeature(jni::JNIEnv& env, const jni::Object<geojson::Feature>& jFeature) {
setCollectionAsync(env, jFeature);
}
- void GeoJSONSource::setGeometry(jni::JNIEnv& env, jni::Object<geojson::Geometry> jGeometry) {
+ void GeoJSONSource::setGeometry(jni::JNIEnv& env, const jni::Object<geojson::Geometry>& jGeometry) {
setCollectionAsync(env, jGeometry);
}
- void GeoJSONSource::setURL(jni::JNIEnv& env, jni::String url) {
+ void GeoJSONSource::setURL(jni::JNIEnv& env, const jni::String& url) {
// Update the core source
source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::setURL(jni::Make<std::string>(env, url));
}
- jni::String GeoJSONSource::getURL(jni::JNIEnv& env) {
+ jni::Local<jni::String> GeoJSONSource::getURL(jni::JNIEnv& env) {
optional<std::string> url = source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::getURL();
- return url ? jni::Make<jni::String>(env, *url) : jni::String();
+ return url ? jni::Make<jni::String>(env, *url) : jni::Local<jni::String>();
}
- jni::Array<jni::Object<geojson::Feature>> GeoJSONSource::querySourceFeatures(jni::JNIEnv& env,
- jni::Array<jni::Object<>> jfilter) {
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> GeoJSONSource::querySourceFeatures(jni::JNIEnv& env,
+ const jni::Array<jni::Object<>>& jfilter) {
using namespace mbgl::android::conversion;
using namespace mbgl::android::geojson;
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
features = rendererFrontend->querySourceFeatures(source.getID(),
- { {}, toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
+ { {}, toFilter(env, jfilter) });
}
return Feature::convert(env, features);
}
- jni::Object<Source> GeoJSONSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<GeoJSONSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> GeoJSONSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<GeoJSONSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
template <class JNIType>
- void GeoJSONSource::setCollectionAsync(jni::JNIEnv& env, jni::Object<JNIType> jObject) {
-
- std::shared_ptr<jni::jobject> object = std::shared_ptr<jni::jobject>(jObject.NewGlobalRef(env).release().Get(), GenericGlobalRefDeleter());
+ void GeoJSONSource::setCollectionAsync(jni::JNIEnv& env, const jni::Object<JNIType>& jObject) {
+ auto global = jni::NewGlobal<jni::EnvAttachingDeleter>(env, jObject);
+ auto object = std::make_shared<decltype(global)>(std::move(global));
Update::Converter converterFn = [this, object](ActorRef<Callback> _callback) {
- converter->self().invoke(&FeatureConverter::convertObject<JNIType>, jni::Object<JNIType>(*object), _callback);
+ converter->self().invoke(&FeatureConverter::convertObject<JNIType>, object, _callback);
};
setAsync(converterFn);
@@ -159,14 +160,14 @@ namespace android {
void GeoJSONSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<GeoJSONSource>::Singleton(env);
+ static auto& javaClass = jni::Class<GeoJSONSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<GeoJSONSource>(
env, javaClass, "nativePtr",
- std::make_unique<GeoJSONSource, JNIEnv&, jni::String, jni::Object<>>,
+ jni::MakePeer<GeoJSONSource, const jni::String&, const jni::Object<>&>,
"initialize",
"finalize",
METHOD(&GeoJSONSource::setGeoJSONString, "nativeSetGeoJsonString"),
@@ -196,13 +197,13 @@ namespace android {
callback.invoke(&Callback::operator(), *converted);
}
- template<class JNIType>
- void FeatureConverter::convertObject(jni::Object<JNIType> jObject, ActorRef<Callback> callback) {
+ template <class JNIType>
+ void FeatureConverter::convertObject(std::shared_ptr<jni::Global<jni::Object<JNIType>, jni::EnvAttachingDeleter>> jObject, ActorRef<Callback> callback) {
using namespace mbgl::android::geojson;
android::UniqueEnv _env = android::AttachEnv();
// Convert the jni object
- auto geometry = JNIType::convert(*_env, jObject);
+ auto geometry = JNIType::convert(*_env, *jObject);
callback.invoke(&Callback::operator(), GeoJSON(geometry));
}
diff --git a/platform/android/src/style/sources/geojson_source.hpp b/platform/android/src/style/sources/geojson_source.hpp
index eb28e2470b..20e8b6873b 100644
--- a/platform/android/src/style/sources/geojson_source.hpp
+++ b/platform/android/src/style/sources/geojson_source.hpp
@@ -16,7 +16,7 @@ struct FeatureConverter {
void convertJson(std::shared_ptr<std::string>, ActorRef<Callback>);
template <class JNIType>
- void convertObject(jni::Object<JNIType>, ActorRef<Callback>);
+ void convertObject(std::shared_ptr<jni::Global<jni::Object<JNIType>, jni::EnvAttachingDeleter>>, ActorRef<Callback>);
};
struct Update {
@@ -30,34 +30,35 @@ struct Update {
class GeoJSONSource : public Source {
public:
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/GeoJsonSource"; };
static void registerNative(jni::JNIEnv&);
- GeoJSONSource(jni::JNIEnv&, jni::String, jni::Object<>);
+ GeoJSONSource(jni::JNIEnv&, const jni::String&, const jni::Object<>&);
GeoJSONSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~GeoJSONSource();
private:
- void setGeoJSONString(jni::JNIEnv&, jni::String);
- void setFeatureCollection(jni::JNIEnv&, jni::Object<geojson::FeatureCollection>);
- void setFeature(jni::JNIEnv&, jni::Object<geojson::Feature>);
- void setGeometry(jni::JNIEnv&, jni::Object<geojson::Geometry>);
- void setURL(jni::JNIEnv&, jni::String);
+ void setGeoJSONString(jni::JNIEnv&, const jni::String&);
+ void setFeatureCollection(jni::JNIEnv&, const jni::Object<geojson::FeatureCollection>&);
+ void setFeature(jni::JNIEnv&, const jni::Object<geojson::Feature>&);
+ void setGeometry(jni::JNIEnv&, const jni::Object<geojson::Geometry>&);
+ void setURL(jni::JNIEnv&, const jni::String&);
- jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&,
- jni::Array<jni::Object<>>);
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> querySourceFeatures(jni::JNIEnv&,
+ const jni::Array<jni::Object<>>&);
- jni::String getURL(jni::JNIEnv&);
+ jni::Local<jni::String> getURL(jni::JNIEnv&);
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
std::unique_ptr<Update> awaitingUpdate;
std::unique_ptr<Update> update;
std::shared_ptr<ThreadPool> threadPool;
std::unique_ptr<Actor<FeatureConverter>> converter;
template <class JNIType>
- void setCollectionAsync(jni::JNIEnv&, jni::Object<JNIType>);
+ void setCollectionAsync(jni::JNIEnv&, const jni::Object<JNIType>&);
void setAsync(Update::Converter);
diff --git a/platform/android/src/style/sources/image_source.cpp b/platform/android/src/style/sources/image_source.cpp
index 343b7439c8..b42e0e5a51 100644
--- a/platform/android/src/style/sources/image_source.cpp
+++ b/platform/android/src/style/sources/image_source.cpp
@@ -15,7 +15,7 @@
namespace mbgl {
namespace android {
- ImageSource::ImageSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<LatLngQuad> coordinatesObject)
+ ImageSource::ImageSource(jni::JNIEnv& env, const jni::String& sourceId, const jni::Object<LatLngQuad>& coordinatesObject)
: Source(env, std::make_unique<mbgl::style::ImageSource>(
jni::Make<std::string>(env, sourceId),
LatLngQuad::getLatLngArray(env, coordinatesObject)
@@ -31,41 +31,41 @@ namespace android {
ImageSource::~ImageSource() = default;
- void ImageSource::setURL(jni::JNIEnv& env, jni::String url) {
+ void ImageSource::setURL(jni::JNIEnv& env, const jni::String& url) {
// Update the core source
source.as<mbgl::style::ImageSource>()->ImageSource::setURL(jni::Make<std::string>(env, url));
}
- jni::String ImageSource::getURL(jni::JNIEnv& env) {
+ jni::Local<jni::String> ImageSource::getURL(jni::JNIEnv& env) {
optional<std::string> url = source.as<mbgl::style::ImageSource>()->ImageSource::getURL();
- return url ? jni::Make<jni::String>(env, *url) : jni::String();
+ return url ? jni::Make<jni::String>(env, *url) : jni::Local<jni::String>();
}
- void ImageSource::setImage(jni::JNIEnv& env, jni::Object<Bitmap> bitmap) {
+ void ImageSource::setImage(jni::JNIEnv& env, const jni::Object<Bitmap>& bitmap) {
source.as<mbgl::style::ImageSource>()->setImage(Bitmap::GetImage(env, bitmap));
}
- void ImageSource::setCoordinates(jni::JNIEnv& env, jni::Object<LatLngQuad> coordinatesObject) {
+ void ImageSource::setCoordinates(jni::JNIEnv& env, const jni::Object<LatLngQuad>& coordinatesObject) {
source.as<mbgl::style::ImageSource>()->setCoordinates(
LatLngQuad::getLatLngArray(env, coordinatesObject));
}
- jni::Object<Source> ImageSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<ImageSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> ImageSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<ImageSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void ImageSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<ImageSource>::Singleton(env);
+ static auto& javaClass = jni::Class<ImageSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<ImageSource>(
env, javaClass, "nativePtr",
- std::make_unique<ImageSource, JNIEnv&, jni::String, jni::Object<LatLngQuad>>,
+ jni::MakePeer<ImageSource, const jni::String&, const jni::Object<LatLngQuad>&>,
"initialize",
"finalize",
METHOD(&ImageSource::setURL, "nativeSetUrl"),
diff --git a/platform/android/src/style/sources/image_source.hpp b/platform/android/src/style/sources/image_source.hpp
index b09d4f8c95..6c359bf0ee 100644
--- a/platform/android/src/style/sources/image_source.hpp
+++ b/platform/android/src/style/sources/image_source.hpp
@@ -12,26 +12,26 @@ class Bitmap;
class ImageSource : public Source {
public:
-
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/ImageSource"; };
static void registerNative(jni::JNIEnv&);
- ImageSource(jni::JNIEnv&, jni::String, jni::Object<LatLngQuad>);
+ ImageSource(jni::JNIEnv&, const jni::String&, const jni::Object<LatLngQuad>&);
ImageSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~ImageSource();
- void setURL(jni::JNIEnv&, jni::String);
- jni::String getURL(jni::JNIEnv&);
+ void setURL(jni::JNIEnv&, const jni::String&);
+ jni::Local<jni::String> getURL(jni::JNIEnv&);
- void setImage(jni::JNIEnv&, jni::Object<Bitmap>);
+ void setImage(jni::JNIEnv&, const jni::Object<Bitmap>&);
- void setCoordinates(jni::JNIEnv&, jni::Object<LatLngQuad>);
+ void setCoordinates(jni::JNIEnv&, const jni::Object<LatLngQuad>&);
private:
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class ImageSource
diff --git a/platform/android/src/style/sources/raster_dem_source.cpp b/platform/android/src/style/sources/raster_dem_source.cpp
index 73d04f27c1..f60526a9b7 100644
--- a/platform/android/src/style/sources/raster_dem_source.cpp
+++ b/platform/android/src/style/sources/raster_dem_source.cpp
@@ -12,12 +12,12 @@
namespace mbgl {
namespace android {
- RasterDEMSource::RasterDEMSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> urlOrTileSet, jni::jint tileSize)
+ RasterDEMSource::RasterDEMSource(jni::JNIEnv& env, const jni::String& sourceId, const jni::Object<>& urlOrTileSet, jni::jint tileSize)
: Source(
env,
std::make_unique<mbgl::style::RasterDEMSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet)))),
+ convertURLOrTileset(Value(env, urlOrTileSet)),
tileSize
)
) {
@@ -31,27 +31,27 @@ namespace android {
RasterDEMSource::~RasterDEMSource() = default;
- jni::String RasterDEMSource::getURL(jni::JNIEnv& env) {
+ jni::Local<jni::String> RasterDEMSource::getURL(jni::JNIEnv& env) {
optional<std::string> url = source.as<mbgl::style::RasterDEMSource>()->RasterDEMSource::getURL();
- return url ? jni::Make<jni::String>(env, *url) : jni::String();
+ return url ? jni::Make<jni::String>(env, *url) : jni::Local<jni::String>();
}
- jni::Object<Source> RasterDEMSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<RasterDEMSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> RasterDEMSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<RasterDEMSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void RasterDEMSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<RasterDEMSource>::Singleton(env);
+ static auto& javaClass = jni::Class<RasterDEMSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<RasterDEMSource>(
env, javaClass, "nativePtr",
- std::make_unique<RasterDEMSource, JNIEnv&, jni::String, jni::Object<>, jni::jint>,
+ jni::MakePeer<RasterDEMSource, const jni::String&, const jni::Object<>&, jni::jint>,
"initialize",
"finalize",
METHOD(&RasterDEMSource::getURL, "nativeGetUrl")
diff --git a/platform/android/src/style/sources/raster_dem_source.hpp b/platform/android/src/style/sources/raster_dem_source.hpp
index 25d9fe90cd..0b31c4ecd3 100644
--- a/platform/android/src/style/sources/raster_dem_source.hpp
+++ b/platform/android/src/style/sources/raster_dem_source.hpp
@@ -9,18 +9,19 @@ namespace android {
class RasterDEMSource : public Source {
public:
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/RasterDemSource"; };
static void registerNative(jni::JNIEnv&);
- RasterDEMSource(jni::JNIEnv&, jni::String, jni::Object<>, jni::jint);
+ RasterDEMSource(jni::JNIEnv&, const jni::String&, const jni::Object<>&, jni::jint);
RasterDEMSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~RasterDEMSource();
- jni::String getURL(jni::JNIEnv&);
+ jni::Local<jni::String> getURL(jni::JNIEnv&);
private:
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class RasterDEMSource
diff --git a/platform/android/src/style/sources/raster_source.cpp b/platform/android/src/style/sources/raster_source.cpp
index 4eef41c8b1..535f899c99 100644
--- a/platform/android/src/style/sources/raster_source.cpp
+++ b/platform/android/src/style/sources/raster_source.cpp
@@ -11,12 +11,12 @@
namespace mbgl {
namespace android {
- RasterSource::RasterSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> urlOrTileSet, jni::jint tileSize)
+ RasterSource::RasterSource(jni::JNIEnv& env, const jni::String& sourceId, const jni::Object<>& urlOrTileSet, jni::jint tileSize)
: Source(
env,
std::make_unique<mbgl::style::RasterSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet)))),
+ convertURLOrTileset(Value(env, urlOrTileSet)),
tileSize
)
) {
@@ -30,27 +30,27 @@ namespace android {
RasterSource::~RasterSource() = default;
- jni::String RasterSource::getURL(jni::JNIEnv& env) {
+ jni::Local<jni::String> RasterSource::getURL(jni::JNIEnv& env) {
optional<std::string> url = source.as<mbgl::style::RasterSource>()->RasterSource::getURL();
- return url ? jni::Make<jni::String>(env, *url) : jni::String();
+ return url ? jni::Make<jni::String>(env, *url) : jni::Local<jni::String>();
}
- jni::Object<Source> RasterSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<RasterSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> RasterSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<RasterSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void RasterSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<RasterSource>::Singleton(env);
+ static auto& javaClass = jni::Class<RasterSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<RasterSource>(
env, javaClass, "nativePtr",
- std::make_unique<RasterSource, JNIEnv&, jni::String, jni::Object<>, jni::jint>,
+ jni::MakePeer<RasterSource, const jni::String&, const jni::Object<>&, jni::jint>,
"initialize",
"finalize",
METHOD(&RasterSource::getURL, "nativeGetUrl")
diff --git a/platform/android/src/style/sources/raster_source.hpp b/platform/android/src/style/sources/raster_source.hpp
index 888d9f601d..08648f79aa 100644
--- a/platform/android/src/style/sources/raster_source.hpp
+++ b/platform/android/src/style/sources/raster_source.hpp
@@ -9,18 +9,19 @@ namespace android {
class RasterSource : public Source {
public:
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/RasterSource"; };
static void registerNative(jni::JNIEnv&);
- RasterSource(jni::JNIEnv&, jni::String, jni::Object<>, jni::jint);
+ RasterSource(jni::JNIEnv&, const jni::String&, const jni::Object<>&, jni::jint);
RasterSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~RasterSource();
- jni::String getURL(jni::JNIEnv&);
+ jni::Local<jni::String> getURL(jni::JNIEnv&);
private:
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class RasterSource
diff --git a/platform/android/src/style/sources/source.cpp b/platform/android/src/style/sources/source.cpp
index c7968786ec..e13f55aff1 100644
--- a/platform/android/src/style/sources/source.cpp
+++ b/platform/android/src/style/sources/source.cpp
@@ -1,5 +1,6 @@
#include "source.hpp"
#include "../android_conversion.hpp"
+#include "../../attach_env.hpp"
#include <jni/jni.hpp>
@@ -47,16 +48,16 @@ namespace android {
}
}
- jni::Object<Source> Source::peerForCoreSource(jni::JNIEnv& env, mbgl::style::Source& coreSource, AndroidRendererFrontend& frontend) {
+ const jni::Object<Source>& Source::peerForCoreSource(jni::JNIEnv& env, mbgl::style::Source& coreSource, AndroidRendererFrontend& frontend) {
if (!coreSource.peer.has_value()) {
coreSource.peer = createSourcePeer(env, coreSource, frontend);
}
- return *coreSource.peer.get<std::unique_ptr<Source>>()->javaPeer;
+ return coreSource.peer.get<std::unique_ptr<Source>>()->javaPeer;
}
- Source::Source(jni::JNIEnv& env, mbgl::style::Source& coreSource, jni::Object<Source> obj, AndroidRendererFrontend& frontend)
+ Source::Source(jni::JNIEnv& env, mbgl::style::Source& coreSource, const jni::Object<Source>& obj, AndroidRendererFrontend& frontend)
: source(coreSource)
- , javaPeer(obj.NewGlobalRef(env))
+ , javaPeer(jni::NewGlobal(env, obj))
, rendererFrontend(&frontend) {
}
@@ -76,23 +77,23 @@ namespace android {
if (ownedSource.get() == nullptr && javaPeer.get() != nullptr) {
// Manually clear the java peer
android::UniqueEnv env = android::AttachEnv();
- static auto javaClass = jni::Class<Source>::Singleton(*env);
+ static auto& javaClass = jni::Class<Source>::Singleton(*env);
static auto nativePtrField = javaClass.GetField<jlong>(*env, "nativePtr");
- javaPeer->Set(*env, nativePtrField, (jlong) 0);
+ javaPeer.Set(*env, nativePtrField, (jlong) 0);
javaPeer.reset();
}
}
- jni::String Source::getId(jni::JNIEnv& env) {
+ jni::Local<jni::String> Source::getId(jni::JNIEnv& env) {
return jni::Make<jni::String>(env, source.getID());
}
- jni::String Source::getAttribution(jni::JNIEnv& env) {
+ jni::Local<jni::String> Source::getAttribution(jni::JNIEnv& env) {
auto attribution = source.getAttribution();
return attribution ? jni::Make<jni::String>(env, attribution.value()) : jni::Make<jni::String>(env,"");
}
- void Source::addToMap(JNIEnv& env, jni::Object<Source> obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
+ void Source::addToMap(JNIEnv& env, const jni::Object<Source>& obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
// Check to see if we own the source first
if (!ownedSource) {
throw std::runtime_error("Cannot add source twice");
@@ -105,12 +106,12 @@ namespace android {
source.peer = std::unique_ptr<Source>(this);
// Add strong reference to java source
- javaPeer = obj.NewGlobalRef(env);
+ javaPeer = jni::NewGlobal(env, obj);
rendererFrontend = &frontend;
}
- bool Source::removeFromMap(JNIEnv&, jni::Object<Source>, mbgl::Map& map) {
+ bool Source::removeFromMap(JNIEnv&, const jni::Object<Source>&, mbgl::Map& map) {
// Cannot remove if not attached yet
if (ownedSource) {
throw std::runtime_error("Cannot remove detached source");
@@ -143,7 +144,7 @@ namespace android {
void Source::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<Source>::Singleton(env);
+ static auto& javaClass = jni::Class<Source>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
diff --git a/platform/android/src/style/sources/source.hpp b/platform/android/src/style/sources/source.hpp
index 492be8dfec..93b706425a 100644
--- a/platform/android/src/style/sources/source.hpp
+++ b/platform/android/src/style/sources/source.hpp
@@ -19,12 +19,12 @@ public:
static void registerNative(jni::JNIEnv&);
- static jni::Object<Source> peerForCoreSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
+ static const jni::Object<Source>& peerForCoreSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
/*
* Called when a Java object is created for a core source that belongs to a map.
*/
- Source(jni::JNIEnv&, mbgl::style::Source&, jni::Object<Source>, AndroidRendererFrontend&);
+ Source(jni::JNIEnv&, mbgl::style::Source&, const jni::Object<Source>&, AndroidRendererFrontend&);
/*
* Called when a Java object is created for a new core source that does not belong to a map.
@@ -33,15 +33,15 @@ public:
virtual ~Source();
- virtual void addToMap(JNIEnv&, jni::Object<Source>, mbgl::Map&, AndroidRendererFrontend&);
+ virtual void addToMap(JNIEnv&, const jni::Object<Source>&, mbgl::Map&, AndroidRendererFrontend&);
- virtual bool removeFromMap(JNIEnv&, jni::Object<Source>, mbgl::Map&);
+ virtual bool removeFromMap(JNIEnv&, const jni::Object<Source>&, mbgl::Map&);
void releaseJavaPeer();
- jni::String getId(jni::JNIEnv&);
+ jni::Local<jni::String> getId(jni::JNIEnv&);
- jni::String getAttribution(jni::JNIEnv&);
+ jni::Local<jni::String> getAttribution(jni::JNIEnv&);
protected:
// Set on newly created sources until added to the map.
diff --git a/platform/android/src/style/sources/unknown_source.cpp b/platform/android/src/style/sources/unknown_source.cpp
index 8e91798392..b5285a5f9f 100644
--- a/platform/android/src/style/sources/unknown_source.cpp
+++ b/platform/android/src/style/sources/unknown_source.cpp
@@ -18,15 +18,15 @@ namespace android {
: Source(env, coreSource, createJavaPeer(env), frontend) {
}
- jni::Object<Source> UnknownSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<UnknownSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> UnknownSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<UnknownSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void UnknownSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<UnknownSource>::Singleton(env);
+ static auto& javaClass = jni::Class<UnknownSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
diff --git a/platform/android/src/style/sources/unknown_source.hpp b/platform/android/src/style/sources/unknown_source.hpp
index 855aea7c63..f042e2042c 100644
--- a/platform/android/src/style/sources/unknown_source.hpp
+++ b/platform/android/src/style/sources/unknown_source.hpp
@@ -9,7 +9,7 @@ namespace android {
class UnknownSource : public Source {
public:
-
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/UnknownSource"; };
static void registerNative(jni::JNIEnv&);
@@ -19,7 +19,7 @@ public:
~UnknownSource() = default;
private:
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class UnknownSource
diff --git a/platform/android/src/style/sources/vector_source.cpp b/platform/android/src/style/sources/vector_source.cpp
index 48eb4ca51c..e46fc1a94e 100644
--- a/platform/android/src/style/sources/vector_source.cpp
+++ b/platform/android/src/style/sources/vector_source.cpp
@@ -20,12 +20,12 @@
namespace mbgl {
namespace android {
- VectorSource::VectorSource(jni::JNIEnv& env, jni::String sourceId, jni::Object<> urlOrTileSet)
+ VectorSource::VectorSource(jni::JNIEnv& env, const jni::String& sourceId, const jni::Object<>& urlOrTileSet)
: Source(
env,
std::make_unique<mbgl::style::VectorSource>(
jni::Make<std::string>(env, sourceId),
- convertURLOrTileset(Value(env, jni::SeizeLocal(env, std::move(urlOrTileSet))))
+ convertURLOrTileset(Value(env, urlOrTileSet))
)
) {
}
@@ -38,41 +38,41 @@ namespace android {
VectorSource::~VectorSource() = default;
- jni::String VectorSource::getURL(jni::JNIEnv& env) {
+ jni::Local<jni::String> VectorSource::getURL(jni::JNIEnv& env) {
optional<std::string> url = source.as<mbgl::style::VectorSource>()->VectorSource::getURL();
- return url ? jni::Make<jni::String>(env, *url) : jni::String();
+ return url ? jni::Make<jni::String>(env, *url) : jni::Local<jni::String>();
}
- jni::Array<jni::Object<geojson::Feature>> VectorSource::querySourceFeatures(jni::JNIEnv& env,
- jni::Array<jni::String> jSourceLayerIds,
- jni::Array<jni::Object<>> jfilter) {
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> VectorSource::querySourceFeatures(jni::JNIEnv& env,
+ const jni::Array<jni::String>& jSourceLayerIds,
+ const jni::Array<jni::Object<>>& jfilter) {
using namespace mbgl::android::conversion;
using namespace mbgl::android::geojson;
std::vector<mbgl::Feature> features;
if (rendererFrontend) {
features = rendererFrontend->querySourceFeatures(source.getID(),
- { toVector(env, jSourceLayerIds), toFilter(env, jni::SeizeLocal(env, std::move(jfilter))) });
+ { toVector(env, jSourceLayerIds), toFilter(env, jfilter) });
}
return Feature::convert(env, features);
}
- jni::Object<Source> VectorSource::createJavaPeer(jni::JNIEnv& env) {
- static auto javaClass = jni::Class<VectorSource>::Singleton(env);
+ jni::Local<jni::Object<Source>> VectorSource::createJavaPeer(jni::JNIEnv& env) {
+ static auto& javaClass = jni::Class<VectorSource>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::jlong>(env);
- return jni::Object<Source>(javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)).Get());
+ return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}
void VectorSource::registerNative(jni::JNIEnv& env) {
// Lookup the class
- static auto javaClass = jni::Class<VectorSource>::Singleton(env);
+ static auto& javaClass = jni::Class<VectorSource>::Singleton(env);
#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
// Register the peer
jni::RegisterNativePeer<VectorSource>(
env, javaClass, "nativePtr",
- std::make_unique<VectorSource, JNIEnv&, jni::String, jni::Object<>>,
+ jni::MakePeer<VectorSource, const jni::String&, const jni::Object<>&>,
"initialize",
"finalize",
METHOD(&VectorSource::querySourceFeatures, "querySourceFeatures"),
diff --git a/platform/android/src/style/sources/vector_source.hpp b/platform/android/src/style/sources/vector_source.hpp
index 587a4be208..4cb46c6c62 100644
--- a/platform/android/src/style/sources/vector_source.hpp
+++ b/platform/android/src/style/sources/vector_source.hpp
@@ -10,21 +10,22 @@ namespace android {
class VectorSource : public Source {
public:
+ using SuperTag = Source;
static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/VectorSource"; };
static void registerNative(jni::JNIEnv&);
- VectorSource(jni::JNIEnv&, jni::String, jni::Object<>);
+ VectorSource(jni::JNIEnv&, const jni::String&, const jni::Object<>&);
VectorSource(jni::JNIEnv&, mbgl::style::Source&, AndroidRendererFrontend&);
~VectorSource();
private:
- jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&, jni::Array<jni::String>,
- jni::Array<jni::Object<>> jfilter);
+ jni::Local<jni::Array<jni::Object<geojson::Feature>>> querySourceFeatures(jni::JNIEnv&, const jni::Array<jni::String>&,
+ const jni::Array<jni::Object<>>& jfilter);
- jni::String getURL(jni::JNIEnv&);
+ jni::Local<jni::String> getURL(jni::JNIEnv&);
- jni::Object<Source> createJavaPeer(jni::JNIEnv&);
+ jni::Local<jni::Object<Source>> createJavaPeer(jni::JNIEnv&);
}; // class VectorSource