diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2018-08-22 12:27:43 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2018-09-07 09:44:12 -0700 |
commit | 79bf0e8af6bf9ec829a352d56b8e70ccc8f4fa41 (patch) | |
tree | 2b646523d45f0fa9917612ed80de12bbd35d5b1e /platform/android/src/style | |
parent | 5911e3b13f2f2b6741e26db3e41513ed21cc95b4 (diff) | |
download | qtlocation-mapboxgl-79bf0e8af6bf9ec829a352d56b8e70ccc8f4fa41.tar.gz |
[android] jni.hpp 4.0.0
Diffstat (limited to 'platform/android/src/style')
62 files changed, 890 insertions, 1180 deletions
diff --git a/platform/android/src/style/conversion/filter.cpp b/platform/android/src/style/conversion/filter.cpp index 44b5a71aa3..d15e2747ac 100644 --- a/platform/android/src/style/conversion/filter.cpp +++ b/platform/android/src/style/conversion/filter.cpp @@ -8,11 +8,11 @@ namespace mbgl { namespace android { namespace conversion { -optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Local<jni::Array<jni::Object<>>> jfilter) { +optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, const jni::Array<jni::Object<>>& jfilter) { mbgl::optional<mbgl::style::Filter> filter; if (jfilter) { mbgl::style::conversion::Error error; - auto converted = mbgl::style::conversion::convert<mbgl::style::Filter>(Value(env, std::move(jfilter)), error); + auto converted = mbgl::style::conversion::convert<mbgl::style::Filter>(Value(env, jfilter), error); if (!converted) { mbgl::Log::Error(mbgl::Event::JNI, "Error converting filter: " + error.message); } diff --git a/platform/android/src/style/conversion/filter.hpp b/platform/android/src/style/conversion/filter.hpp index f638a853a1..920d336a1a 100644 --- a/platform/android/src/style/conversion/filter.hpp +++ b/platform/android/src/style/conversion/filter.hpp @@ -9,7 +9,7 @@ namespace mbgl { namespace android { namespace conversion { -optional<mbgl::style::Filter> toFilter(jni::JNIEnv&, jni::Local<jni::Array<jni::Object<>>>); +optional<mbgl::style::Filter> toFilter(jni::JNIEnv&, const jni::Array<jni::Object<>>&); } // namespace conversion } // namespace android diff --git a/platform/android/src/style/conversion/position.cpp b/platform/android/src/style/conversion/position.cpp index 9b3925914e..e3c334afd2 100644 --- a/platform/android/src/style/conversion/position.cpp +++ b/platform/android/src/style/conversion/position.cpp @@ -4,7 +4,7 @@ namespace mbgl { namespace android { namespace conversion { -Result<jni::Object<Position>> Converter<jni::Object<Position>, mbgl::style::Position>::operator()(jni::JNIEnv &env, const mbgl::style::Position &value) const { +Result<jni::Local<jni::Object<Position>>> Converter<jni::Local<jni::Object<Position>>, mbgl::style::Position>::operator()(jni::JNIEnv &env, const mbgl::style::Position &value) const { std::array<float, 3> cartPosition = value.getSpherical(); return Position::fromPosition(env, cartPosition[0], cartPosition[1], cartPosition[2]); } diff --git a/platform/android/src/style/conversion/position.hpp b/platform/android/src/style/conversion/position.hpp index 2ef4bf4395..90409d527d 100644 --- a/platform/android/src/style/conversion/position.hpp +++ b/platform/android/src/style/conversion/position.hpp @@ -11,8 +11,8 @@ namespace android { namespace conversion { template <> -struct Converter<jni::Object<Position>, mbgl::style::Position> { - Result<jni::Object<Position>> operator()(jni::JNIEnv &env, const mbgl::style::Position &value) const; +struct Converter<jni::Local<jni::Object<Position>>, mbgl::style::Position> { + Result<jni::Local<jni::Object<Position>>> operator()(jni::JNIEnv &env, const mbgl::style::Position &value) const; }; template <> diff --git a/platform/android/src/style/conversion/property_expression.hpp b/platform/android/src/style/conversion/property_expression.hpp index 08429960cb..4e26b11f96 100644 --- a/platform/android/src/style/conversion/property_expression.hpp +++ b/platform/android/src/style/conversion/property_expression.hpp @@ -12,8 +12,8 @@ namespace android { namespace conversion { template <class T> -struct Converter<jni::Object<android::gson::JsonElement>, mbgl::style::PropertyExpression<T>> { - Result<jni::Object<android::gson::JsonElement>> operator()(jni::JNIEnv& env, const mbgl::style::PropertyExpression<T>& value) const { +struct Converter<jni::Local<jni::Object<android::gson::JsonElement>>, mbgl::style::PropertyExpression<T>> { + Result<jni::Local<jni::Object<android::gson::JsonElement>>> operator()(jni::JNIEnv& env, const mbgl::style::PropertyExpression<T>& value) const { return gson::JsonElement::New(env, value.getExpression().serialize()); } }; diff --git a/platform/android/src/style/conversion/property_value.hpp b/platform/android/src/style/conversion/property_value.hpp index 8150285c85..317705a286 100644 --- a/platform/android/src/style/conversion/property_value.hpp +++ b/platform/android/src/style/conversion/property_value.hpp @@ -19,16 +19,16 @@ class PropertyValueEvaluator { public: PropertyValueEvaluator(jni::JNIEnv& _env) : env(_env) {} - jni::jobject* operator()(const mbgl::style::Undefined) const { - return nullptr; + jni::Local<jni::Object<>> operator()(const mbgl::style::Undefined) const { + return jni::Local<jni::Object<>>(env, nullptr); } - jni::jobject* operator()(const T& value) const { - return *convert<jni::jobject*>(env, value); + jni::Local<jni::Object<>> operator()(const T& value) const { + return std::move(*convert<jni::Local<jni::Object<>>>(env, value)); } - jni::jobject* operator()(const mbgl::style::PropertyExpression<T>& value) const { - return *convert<jni::Object<android::gson::JsonElement>>(env, value); + jni::Local<jni::Object<>> operator()(const mbgl::style::PropertyExpression<T>& value) const { + return std::move(*convert<jni::Local<jni::Object<android::gson::JsonElement>>>(env, value)); } private: @@ -39,8 +39,8 @@ private: * Convert core property values to java */ template <class T> -struct Converter<jni::jobject*, mbgl::style::PropertyValue<T>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::PropertyValue<T>& value) const { +struct Converter<jni::Local<jni::Object<>>, mbgl::style::PropertyValue<T>> { + Result<jni::Local<jni::Object<>>> operator()(jni::JNIEnv& env, const mbgl::style::PropertyValue<T>& value) const { PropertyValueEvaluator<T> evaluator(env); return value.evaluate(evaluator); } @@ -50,10 +50,10 @@ struct Converter<jni::jobject*, mbgl::style::PropertyValue<T>> { * Convert core heat map color property value to java */ template <> -struct Converter<jni::jobject*, mbgl::style::ColorRampPropertyValue> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const mbgl::style::ColorRampPropertyValue& value) const { +struct Converter<jni::Local<jni::Object<>>, mbgl::style::ColorRampPropertyValue> { + Result<jni::Local<jni::Object<>>> operator()(jni::JNIEnv& env, const mbgl::style::ColorRampPropertyValue& value) const { PropertyValueEvaluator<mbgl::style::ColorRampPropertyValue> evaluator(env); - return *convert<jni::jobject*>(env, value.evaluate(evaluator)); + return std::move(*convert<jni::Local<jni::Object<>>>(env, value.evaluate(evaluator))); } }; diff --git a/platform/android/src/style/conversion/transition_options.cpp b/platform/android/src/style/conversion/transition_options.cpp index 313333ad17..66ddc74145 100644 --- a/platform/android/src/style/conversion/transition_options.cpp +++ b/platform/android/src/style/conversion/transition_options.cpp @@ -4,7 +4,7 @@ namespace mbgl { namespace android { namespace conversion { -Result<jni::Object<TransitionOptions>> Converter<jni::Object<TransitionOptions>, mbgl::style::TransitionOptions>::operator()(jni::JNIEnv& env, const mbgl::style::TransitionOptions& value) const { +Result<jni::Local<jni::Object<TransitionOptions>>> Converter<jni::Local<jni::Object<TransitionOptions>>, mbgl::style::TransitionOptions>::operator()(jni::JNIEnv& env, const mbgl::style::TransitionOptions& value) const { return TransitionOptions::fromTransitionOptions(env, std::chrono::duration_cast<std::chrono::milliseconds>(value.duration.value_or(mbgl::Duration::zero())).count(), std::chrono::duration_cast<std::chrono::milliseconds>(value.delay.value_or(mbgl::Duration::zero())).count() diff --git a/platform/android/src/style/conversion/transition_options.hpp b/platform/android/src/style/conversion/transition_options.hpp index 6630456d37..06c042922e 100644 --- a/platform/android/src/style/conversion/transition_options.hpp +++ b/platform/android/src/style/conversion/transition_options.hpp @@ -12,8 +12,8 @@ namespace android { namespace conversion { template<> -struct Converter<jni::Object<TransitionOptions>, mbgl::style::TransitionOptions> { - Result<jni::Object<TransitionOptions>> operator()(jni::JNIEnv&, const mbgl::style::TransitionOptions&) const; +struct Converter<jni::Local<jni::Object<TransitionOptions>>, mbgl::style::TransitionOptions> { + Result<jni::Local<jni::Object<TransitionOptions>>> operator()(jni::JNIEnv&, const mbgl::style::TransitionOptions&) const; }; } diff --git a/platform/android/src/style/layers/background_layer.cpp b/platform/android/src/style/layers/background_layer.cpp index 00c348b232..c806e8471f 100644 --- a/platform/android/src/style/layers/background_layer.cpp +++ b/platform/android/src/style/layers/background_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - BackgroundLayer::BackgroundLayer(jni::JNIEnv& env, jni::String layerId) + BackgroundLayer::BackgroundLayer(jni::JNIEnv& env, jni::String& layerId) : Layer(env, std::make_unique<mbgl::style::BackgroundLayer>(jni::Make<std::string>(env, layerId))) { } @@ -35,16 +35,15 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> BackgroundLayer::getBackgroundColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> BackgroundLayer::getBackgroundColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundColor())); } - jni::Object<TransitionOptions> BackgroundLayer::getBackgroundColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> BackgroundLayer::getBackgroundColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void BackgroundLayer::setBackgroundColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -54,16 +53,15 @@ namespace android { layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::setBackgroundColorTransition(options); } - jni::Object<jni::ObjectTag> BackgroundLayer::getBackgroundPattern(jni::JNIEnv& env) { + jni::Local<jni::Object<>> BackgroundLayer::getBackgroundPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundPattern()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundPattern())); } - jni::Object<TransitionOptions> BackgroundLayer::getBackgroundPatternTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> BackgroundLayer::getBackgroundPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundPatternTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void BackgroundLayer::setBackgroundPatternTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -73,16 +71,15 @@ namespace android { layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::setBackgroundPatternTransition(options); } - jni::Object<jni::ObjectTag> BackgroundLayer::getBackgroundOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> BackgroundLayer::getBackgroundOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundOpacity())); } - jni::Object<TransitionOptions> BackgroundLayer::getBackgroundOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> BackgroundLayer::getBackgroundOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::BackgroundLayer>()->BackgroundLayer::getBackgroundOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void BackgroundLayer::setBackgroundOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -93,22 +90,22 @@ namespace android { } - jni::jobject* BackgroundLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<BackgroundLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> BackgroundLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<BackgroundLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void BackgroundLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<BackgroundLayer>::Singleton(env); + static auto& javaClass = jni::Class<BackgroundLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<BackgroundLayer>( env, javaClass, "nativePtr", - std::make_unique<BackgroundLayer, JNIEnv&, jni::String>, + jni::MakePeer<BackgroundLayer, jni::String&>, "initialize", "finalize", METHOD(&BackgroundLayer::getBackgroundColorTransition, "nativeGetBackgroundColorTransition"), diff --git a/platform/android/src/style/layers/background_layer.hpp b/platform/android/src/style/layers/background_layer.hpp index 3b7f03ddb6..78cd5659fd 100644 --- a/platform/android/src/style/layers/background_layer.hpp +++ b/platform/android/src/style/layers/background_layer.hpp @@ -12,12 +12,12 @@ namespace android { class BackgroundLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/BackgroundLayer"; }; static void registerNative(jni::JNIEnv&); - BackgroundLayer(jni::JNIEnv&, jni::String); + BackgroundLayer(jni::JNIEnv&, jni::String&); BackgroundLayer(mbgl::Map&, mbgl::style::BackgroundLayer&); @@ -27,18 +27,18 @@ public: // Properties - jni::Object<jni::ObjectTag> getBackgroundColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getBackgroundColor(jni::JNIEnv&); void setBackgroundColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getBackgroundColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getBackgroundColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getBackgroundPattern(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getBackgroundPattern(jni::JNIEnv&); void setBackgroundPatternTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getBackgroundPatternTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getBackgroundPatternTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getBackgroundOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getBackgroundOpacity(jni::JNIEnv&); void setBackgroundOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getBackgroundOpacityTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getBackgroundOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class BackgroundLayer diff --git a/platform/android/src/style/layers/circle_layer.cpp b/platform/android/src/style/layers/circle_layer.cpp index 47a492dd43..9ec48d7b18 100644 --- a/platform/android/src/style/layers/circle_layer.cpp +++ b/platform/android/src/style/layers/circle_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - CircleLayer::CircleLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + CircleLayer::CircleLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::CircleLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,16 +35,15 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> CircleLayer::getCircleRadius(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleRadius(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleRadius()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleRadius())); } - jni::Object<TransitionOptions> CircleLayer::getCircleRadiusTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleRadiusTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleRadiusTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleRadiusTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -54,16 +53,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleRadiusTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleColor())); } - jni::Object<TransitionOptions> CircleLayer::getCircleColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -73,16 +71,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleColorTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleBlur(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleBlur()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleBlur())); } - jni::Object<TransitionOptions> CircleLayer::getCircleBlurTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleBlurTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleBlurTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -92,16 +89,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleBlurTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleOpacity())); } - jni::Object<TransitionOptions> CircleLayer::getCircleOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -111,16 +107,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleOpacityTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleTranslate())); } - jni::Object<TransitionOptions> CircleLayer::getCircleTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -130,34 +125,30 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleTranslateTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleTranslateAnchor())); } - jni::Object<jni::ObjectTag> CircleLayer::getCirclePitchScale(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCirclePitchScale(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCirclePitchScale()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCirclePitchScale())); } - jni::Object<jni::ObjectTag> CircleLayer::getCirclePitchAlignment(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCirclePitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCirclePitchAlignment()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCirclePitchAlignment())); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleStrokeWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleStrokeWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeWidth())); } - jni::Object<TransitionOptions> CircleLayer::getCircleStrokeWidthTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleStrokeWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeWidthTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleStrokeWidthTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -167,16 +158,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleStrokeWidthTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleStrokeColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleStrokeColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeColor())); } - jni::Object<TransitionOptions> CircleLayer::getCircleStrokeColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleStrokeColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleStrokeColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -186,16 +176,15 @@ namespace android { layer.as<mbgl::style::CircleLayer>()->CircleLayer::setCircleStrokeColorTransition(options); } - jni::Object<jni::ObjectTag> CircleLayer::getCircleStrokeOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> CircleLayer::getCircleStrokeOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeOpacity())); } - jni::Object<TransitionOptions> CircleLayer::getCircleStrokeOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> CircleLayer::getCircleStrokeOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::CircleLayer>()->CircleLayer::getCircleStrokeOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void CircleLayer::setCircleStrokeOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -206,22 +195,22 @@ namespace android { } - jni::jobject* CircleLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<CircleLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> CircleLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<CircleLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void CircleLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<CircleLayer>::Singleton(env); + static auto& javaClass = jni::Class<CircleLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<CircleLayer>( env, javaClass, "nativePtr", - std::make_unique<CircleLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<CircleLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&CircleLayer::getCircleRadiusTransition, "nativeGetCircleRadiusTransition"), diff --git a/platform/android/src/style/layers/circle_layer.hpp b/platform/android/src/style/layers/circle_layer.hpp index 03063b1fc1..0ff34094e1 100644 --- a/platform/android/src/style/layers/circle_layer.hpp +++ b/platform/android/src/style/layers/circle_layer.hpp @@ -12,12 +12,12 @@ namespace android { class CircleLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/CircleLayer"; }; static void registerNative(jni::JNIEnv&); - CircleLayer(jni::JNIEnv&, jni::String, jni::String); + CircleLayer(jni::JNIEnv&, jni::String&, jni::String&); CircleLayer(mbgl::Map&, mbgl::style::CircleLayer&); @@ -27,44 +27,44 @@ public: // Properties - jni::Object<jni::ObjectTag> getCircleRadius(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleRadius(jni::JNIEnv&); void setCircleRadiusTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleRadiusTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleRadiusTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleColor(jni::JNIEnv&); void setCircleColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleBlur(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleBlur(jni::JNIEnv&); void setCircleBlurTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleBlurTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleBlurTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleOpacity(jni::JNIEnv&); void setCircleOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleTranslate(jni::JNIEnv&); void setCircleTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleTranslateAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCirclePitchScale(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCirclePitchScale(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCirclePitchAlignment(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCirclePitchAlignment(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleStrokeWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleStrokeWidth(jni::JNIEnv&); void setCircleStrokeWidthTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleStrokeWidthTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleStrokeWidthTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleStrokeColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleStrokeColor(jni::JNIEnv&); void setCircleStrokeColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleStrokeColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleStrokeColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getCircleStrokeOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getCircleStrokeOpacity(jni::JNIEnv&); void setCircleStrokeOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getCircleStrokeOpacityTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getCircleStrokeOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class CircleLayer diff --git a/platform/android/src/style/layers/custom_layer.cpp b/platform/android/src/style/layers/custom_layer.cpp index c0dcc24f06..f6f3bb249c 100644 --- a/platform/android/src/style/layers/custom_layer.cpp +++ b/platform/android/src/style/layers/custom_layer.cpp @@ -7,7 +7,7 @@ namespace mbgl { namespace android { - CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong host) + CustomLayer::CustomLayer(jni::JNIEnv& env, const jni::String& layerId, jni::jlong host) : Layer(env, std::make_unique<mbgl::style::CustomLayer>( jni::Make<std::string>(env, layerId), std::unique_ptr<mbgl::style::CustomLayerHost>(reinterpret_cast<mbgl::style::CustomLayerHost*>(host))) @@ -33,22 +33,22 @@ namespace android { } } - jni::jobject* CustomLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<CustomLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> CustomLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<CustomLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void CustomLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<CustomLayer>::Singleton(env); + static auto& javaClass = jni::Class<CustomLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<CustomLayer>( env, javaClass, "nativePtr", - std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong>, + jni::MakePeer<CustomLayer, const jni::String&, jni::jlong>, "initialize", "finalize", METHOD(&CustomLayer::update, "nativeUpdate")); diff --git a/platform/android/src/style/layers/custom_layer.hpp b/platform/android/src/style/layers/custom_layer.hpp index 75e1957717..950fcef9c1 100644 --- a/platform/android/src/style/layers/custom_layer.hpp +++ b/platform/android/src/style/layers/custom_layer.hpp @@ -9,18 +9,19 @@ namespace android { class CustomLayer : public Layer { public: + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/CustomLayer"; }; static void registerNative(jni::JNIEnv&); - CustomLayer(jni::JNIEnv&, jni::String, jni::jlong); + CustomLayer(jni::JNIEnv&, const jni::String&, jni::jlong); CustomLayer(mbgl::Map&, mbgl::style::CustomLayer&); CustomLayer(mbgl::Map&, std::unique_ptr<mbgl::style::CustomLayer>); ~CustomLayer(); void update(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class CustomLayer diff --git a/platform/android/src/style/layers/fill_extrusion_layer.cpp b/platform/android/src/style/layers/fill_extrusion_layer.cpp index 6c6a0bef5a..cf53e774a5 100644 --- a/platform/android/src/style/layers/fill_extrusion_layer.cpp +++ b/platform/android/src/style/layers/fill_extrusion_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - FillExtrusionLayer::FillExtrusionLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + FillExtrusionLayer::FillExtrusionLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::FillExtrusionLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,16 +35,15 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionOpacity())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -54,16 +53,15 @@ namespace android { layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::setFillExtrusionOpacityTransition(options); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionColor())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -73,16 +71,15 @@ namespace android { layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::setFillExtrusionColorTransition(options); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionTranslate())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -92,22 +89,20 @@ namespace android { layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::setFillExtrusionTranslateTransition(options); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionTranslateAnchor())); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionPattern(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionPattern()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionPattern())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionPatternTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionPatternTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionPatternTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -117,16 +112,15 @@ namespace android { layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::setFillExtrusionPatternTransition(options); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionHeight(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionHeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionHeight()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionHeight())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionHeightTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionHeightTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionHeightTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionHeightTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -136,16 +130,15 @@ namespace android { layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::setFillExtrusionHeightTransition(options); } - jni::Object<jni::ObjectTag> FillExtrusionLayer::getFillExtrusionBase(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionBase(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionBase()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionBase())); } - jni::Object<TransitionOptions> FillExtrusionLayer::getFillExtrusionBaseTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillExtrusionLayer::getFillExtrusionBaseTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillExtrusionLayer>()->FillExtrusionLayer::getFillExtrusionBaseTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillExtrusionLayer::setFillExtrusionBaseTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -156,22 +149,22 @@ namespace android { } - jni::jobject* FillExtrusionLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<FillExtrusionLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> FillExtrusionLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<FillExtrusionLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void FillExtrusionLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<FillExtrusionLayer>::Singleton(env); + static auto& javaClass = jni::Class<FillExtrusionLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<FillExtrusionLayer>( env, javaClass, "nativePtr", - std::make_unique<FillExtrusionLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<FillExtrusionLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&FillExtrusionLayer::getFillExtrusionOpacityTransition, "nativeGetFillExtrusionOpacityTransition"), diff --git a/platform/android/src/style/layers/fill_extrusion_layer.hpp b/platform/android/src/style/layers/fill_extrusion_layer.hpp index 233c3cc334..abc30b5845 100644 --- a/platform/android/src/style/layers/fill_extrusion_layer.hpp +++ b/platform/android/src/style/layers/fill_extrusion_layer.hpp @@ -12,12 +12,12 @@ namespace android { class FillExtrusionLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer"; }; static void registerNative(jni::JNIEnv&); - FillExtrusionLayer(jni::JNIEnv&, jni::String, jni::String); + FillExtrusionLayer(jni::JNIEnv&, jni::String&, jni::String&); FillExtrusionLayer(mbgl::Map&, mbgl::style::FillExtrusionLayer&); @@ -27,32 +27,32 @@ public: // Properties - jni::Object<jni::ObjectTag> getFillExtrusionOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionOpacity(jni::JNIEnv&); void setFillExtrusionOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionColor(jni::JNIEnv&); void setFillExtrusionColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionTranslate(jni::JNIEnv&); void setFillExtrusionTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionTranslateAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionPattern(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionPattern(jni::JNIEnv&); void setFillExtrusionPatternTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionPatternTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionPatternTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionHeight(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionHeight(jni::JNIEnv&); void setFillExtrusionHeightTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionHeightTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionHeightTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillExtrusionBase(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionBase(jni::JNIEnv&); void setFillExtrusionBaseTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillExtrusionBaseTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillExtrusionBaseTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class FillExtrusionLayer diff --git a/platform/android/src/style/layers/fill_layer.cpp b/platform/android/src/style/layers/fill_layer.cpp index 5182c546c8..555f8eb3cd 100644 --- a/platform/android/src/style/layers/fill_layer.cpp +++ b/platform/android/src/style/layers/fill_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - FillLayer::FillLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + FillLayer::FillLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::FillLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,22 +35,20 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> FillLayer::getFillAntialias(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillAntialias(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillAntialias()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillAntialias())); } - jni::Object<jni::ObjectTag> FillLayer::getFillOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOpacity())); } - jni::Object<TransitionOptions> FillLayer::getFillOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillLayer::getFillOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillLayer::setFillOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -60,16 +58,15 @@ namespace android { layer.as<mbgl::style::FillLayer>()->FillLayer::setFillOpacityTransition(options); } - jni::Object<jni::ObjectTag> FillLayer::getFillColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillColor())); } - jni::Object<TransitionOptions> FillLayer::getFillColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillLayer::getFillColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillLayer>()->FillLayer::getFillColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillLayer::setFillColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -79,16 +76,15 @@ namespace android { layer.as<mbgl::style::FillLayer>()->FillLayer::setFillColorTransition(options); } - jni::Object<jni::ObjectTag> FillLayer::getFillOutlineColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillOutlineColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOutlineColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOutlineColor())); } - jni::Object<TransitionOptions> FillLayer::getFillOutlineColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillLayer::getFillOutlineColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillLayer>()->FillLayer::getFillOutlineColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillLayer::setFillOutlineColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -98,16 +94,15 @@ namespace android { layer.as<mbgl::style::FillLayer>()->FillLayer::setFillOutlineColorTransition(options); } - jni::Object<jni::ObjectTag> FillLayer::getFillTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillTranslate())); } - jni::Object<TransitionOptions> FillLayer::getFillTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillLayer::getFillTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillLayer>()->FillLayer::getFillTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillLayer::setFillTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -117,22 +112,20 @@ namespace android { layer.as<mbgl::style::FillLayer>()->FillLayer::setFillTranslateTransition(options); } - jni::Object<jni::ObjectTag> FillLayer::getFillTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillTranslateAnchor())); } - jni::Object<jni::ObjectTag> FillLayer::getFillPattern(jni::JNIEnv& env) { + jni::Local<jni::Object<>> FillLayer::getFillPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillPattern()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::FillLayer>()->FillLayer::getFillPattern())); } - jni::Object<TransitionOptions> FillLayer::getFillPatternTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> FillLayer::getFillPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::FillLayer>()->FillLayer::getFillPatternTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void FillLayer::setFillPatternTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -143,22 +136,22 @@ namespace android { } - jni::jobject* FillLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<FillLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> FillLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<FillLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void FillLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<FillLayer>::Singleton(env); + static auto& javaClass = jni::Class<FillLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<FillLayer>( env, javaClass, "nativePtr", - std::make_unique<FillLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<FillLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&FillLayer::getFillAntialias, "nativeGetFillAntialias"), diff --git a/platform/android/src/style/layers/fill_layer.hpp b/platform/android/src/style/layers/fill_layer.hpp index db1fee1667..ea96320570 100644 --- a/platform/android/src/style/layers/fill_layer.hpp +++ b/platform/android/src/style/layers/fill_layer.hpp @@ -12,12 +12,12 @@ namespace android { class FillLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/FillLayer"; }; static void registerNative(jni::JNIEnv&); - FillLayer(jni::JNIEnv&, jni::String, jni::String); + FillLayer(jni::JNIEnv&, jni::String&, jni::String&); FillLayer(mbgl::Map&, mbgl::style::FillLayer&); @@ -27,30 +27,30 @@ public: // Properties - jni::Object<jni::ObjectTag> getFillAntialias(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillAntialias(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillOpacity(jni::JNIEnv&); void setFillOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillColor(jni::JNIEnv&); void setFillColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillOutlineColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillOutlineColor(jni::JNIEnv&); void setFillOutlineColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillOutlineColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillOutlineColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillTranslate(jni::JNIEnv&); void setFillTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillTranslateAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getFillPattern(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getFillPattern(jni::JNIEnv&); void setFillPatternTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getFillPatternTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getFillPatternTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class FillLayer diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp index e83d92873f..b72b372929 100644 --- a/platform/android/src/style/layers/heatmap_layer.cpp +++ b/platform/android/src/style/layers/heatmap_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - HeatmapLayer::HeatmapLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + HeatmapLayer::HeatmapLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::HeatmapLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,16 +35,15 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapRadius(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapRadius(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapRadius()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapRadius())); } - jni::Object<TransitionOptions> HeatmapLayer::getHeatmapRadiusTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HeatmapLayer::getHeatmapRadiusTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapRadiusTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HeatmapLayer::setHeatmapRadiusTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -54,22 +53,20 @@ namespace android { layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::setHeatmapRadiusTransition(options); } - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapWeight(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapWeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapWeight()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapWeight())); } - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapIntensity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapIntensity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapIntensity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapIntensity())); } - jni::Object<TransitionOptions> HeatmapLayer::getHeatmapIntensityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HeatmapLayer::getHeatmapIntensityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapIntensityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HeatmapLayer::setHeatmapIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -79,26 +76,24 @@ namespace android { layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::setHeatmapIntensityTransition(options); } - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor(); if (propertyValue.isUndefined()) { propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor(); } - Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, propertyValue)); } - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapOpacity())); } - jni::Object<TransitionOptions> HeatmapLayer::getHeatmapOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HeatmapLayer::getHeatmapOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HeatmapLayer::setHeatmapOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -109,22 +104,22 @@ namespace android { } - jni::jobject* HeatmapLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<HeatmapLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> HeatmapLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<HeatmapLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void HeatmapLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<HeatmapLayer>::Singleton(env); + static auto& javaClass = jni::Class<HeatmapLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<HeatmapLayer>( env, javaClass, "nativePtr", - std::make_unique<HeatmapLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<HeatmapLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&HeatmapLayer::getHeatmapRadiusTransition, "nativeGetHeatmapRadiusTransition"), diff --git a/platform/android/src/style/layers/heatmap_layer.hpp b/platform/android/src/style/layers/heatmap_layer.hpp index 00ab27d854..2976e6c482 100644 --- a/platform/android/src/style/layers/heatmap_layer.hpp +++ b/platform/android/src/style/layers/heatmap_layer.hpp @@ -12,12 +12,12 @@ namespace android { class HeatmapLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/HeatmapLayer"; }; static void registerNative(jni::JNIEnv&); - HeatmapLayer(jni::JNIEnv&, jni::String, jni::String); + HeatmapLayer(jni::JNIEnv&, jni::String&, jni::String&); HeatmapLayer(mbgl::Map&, mbgl::style::HeatmapLayer&); @@ -27,22 +27,22 @@ public: // Properties - jni::Object<jni::ObjectTag> getHeatmapRadius(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHeatmapRadius(jni::JNIEnv&); void setHeatmapRadiusTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHeatmapRadiusTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHeatmapRadiusTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHeatmapWeight(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHeatmapWeight(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHeatmapIntensity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHeatmapIntensity(jni::JNIEnv&); void setHeatmapIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHeatmapIntensityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHeatmapIntensityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHeatmapColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHeatmapColor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHeatmapOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHeatmapOpacity(jni::JNIEnv&); void setHeatmapOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHeatmapOpacityTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHeatmapOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class HeatmapLayer diff --git a/platform/android/src/style/layers/hillshade_layer.cpp b/platform/android/src/style/layers/hillshade_layer.cpp index b6409b3b3e..5cd6162575 100644 --- a/platform/android/src/style/layers/hillshade_layer.cpp +++ b/platform/android/src/style/layers/hillshade_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - HillshadeLayer::HillshadeLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + HillshadeLayer::HillshadeLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::HillshadeLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,28 +35,25 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeIlluminationDirection(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeIlluminationDirection(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeIlluminationDirection()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeIlluminationDirection())); } - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeIlluminationAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeIlluminationAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeIlluminationAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeIlluminationAnchor())); } - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeExaggeration(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeExaggeration(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeExaggeration()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeExaggeration())); } - jni::Object<TransitionOptions> HillshadeLayer::getHillshadeExaggerationTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HillshadeLayer::getHillshadeExaggerationTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeExaggerationTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HillshadeLayer::setHillshadeExaggerationTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -66,16 +63,15 @@ namespace android { layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::setHillshadeExaggerationTransition(options); } - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeShadowColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeShadowColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeShadowColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeShadowColor())); } - jni::Object<TransitionOptions> HillshadeLayer::getHillshadeShadowColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HillshadeLayer::getHillshadeShadowColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeShadowColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HillshadeLayer::setHillshadeShadowColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -85,16 +81,15 @@ namespace android { layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::setHillshadeShadowColorTransition(options); } - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeHighlightColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeHighlightColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeHighlightColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeHighlightColor())); } - jni::Object<TransitionOptions> HillshadeLayer::getHillshadeHighlightColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HillshadeLayer::getHillshadeHighlightColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeHighlightColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HillshadeLayer::setHillshadeHighlightColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -104,16 +99,15 @@ namespace android { layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::setHillshadeHighlightColorTransition(options); } - jni::Object<jni::ObjectTag> HillshadeLayer::getHillshadeAccentColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HillshadeLayer::getHillshadeAccentColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeAccentColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeAccentColor())); } - jni::Object<TransitionOptions> HillshadeLayer::getHillshadeAccentColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> HillshadeLayer::getHillshadeAccentColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::HillshadeLayer>()->HillshadeLayer::getHillshadeAccentColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void HillshadeLayer::setHillshadeAccentColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -124,22 +118,22 @@ namespace android { } - jni::jobject* HillshadeLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<HillshadeLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> HillshadeLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<HillshadeLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void HillshadeLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<HillshadeLayer>::Singleton(env); + static auto& javaClass = jni::Class<HillshadeLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<HillshadeLayer>( env, javaClass, "nativePtr", - std::make_unique<HillshadeLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<HillshadeLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&HillshadeLayer::getHillshadeIlluminationDirection, "nativeGetHillshadeIlluminationDirection"), diff --git a/platform/android/src/style/layers/hillshade_layer.hpp b/platform/android/src/style/layers/hillshade_layer.hpp index f824698058..9ca0e33cfd 100644 --- a/platform/android/src/style/layers/hillshade_layer.hpp +++ b/platform/android/src/style/layers/hillshade_layer.hpp @@ -12,12 +12,12 @@ namespace android { class HillshadeLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/HillshadeLayer"; }; static void registerNative(jni::JNIEnv&); - HillshadeLayer(jni::JNIEnv&, jni::String, jni::String); + HillshadeLayer(jni::JNIEnv&, jni::String&, jni::String&); HillshadeLayer(mbgl::Map&, mbgl::style::HillshadeLayer&); @@ -27,26 +27,26 @@ public: // Properties - jni::Object<jni::ObjectTag> getHillshadeIlluminationDirection(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeIlluminationDirection(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHillshadeIlluminationAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeIlluminationAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHillshadeExaggeration(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeExaggeration(jni::JNIEnv&); void setHillshadeExaggerationTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHillshadeExaggerationTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHillshadeExaggerationTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHillshadeShadowColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeShadowColor(jni::JNIEnv&); void setHillshadeShadowColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHillshadeShadowColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHillshadeShadowColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHillshadeHighlightColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeHighlightColor(jni::JNIEnv&); void setHillshadeHighlightColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHillshadeHighlightColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHillshadeHighlightColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getHillshadeAccentColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getHillshadeAccentColor(jni::JNIEnv&); void setHillshadeAccentColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getHillshadeAccentColorTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getHillshadeAccentColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class HillshadeLayer diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index fe4fb9aeb6..5726873f40 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -83,7 +83,7 @@ namespace android { return std::move(ownedLayer); } - jni::String Layer::getId(jni::JNIEnv& env) { + jni::Local<jni::String> Layer::getId(jni::JNIEnv& env) { return jni::Make<jni::String>(env, layer.getID()); } @@ -91,18 +91,18 @@ namespace android { return layer; } - void Layer::setLayoutProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) { + void Layer::setLayoutProperty(jni::JNIEnv& env, const jni::String& jname, const jni::Object<>& jvalue) { // Convert and set property - optional<mbgl::style::conversion::Error> error = layer.setLayoutProperty(jni::Make<std::string>(env, jname), Value(env, jni::SeizeLocal(env, std::move(jvalue)))); + optional<mbgl::style::conversion::Error> error = layer.setLayoutProperty(jni::Make<std::string>(env, jname), Value(env, jvalue)); if (error) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make<std::string>(env, jname) + " " + error->message); return; } } - void Layer::setPaintProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) { + void Layer::setPaintProperty(jni::JNIEnv& env, const jni::String& jname, const jni::Object<>& jvalue) { // Convert and set property - optional<mbgl::style::conversion::Error> error = layer.setPaintProperty(jni::Make<std::string>(env, jname), Value(env, jni::SeizeLocal(env, std::move(jvalue)))); + optional<mbgl::style::conversion::Error> error = layer.setPaintProperty(jni::Make<std::string>(env, jname), Value(env, jvalue)); if (error) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make<std::string>(env, jname) + " " + error->message); return; @@ -123,12 +123,12 @@ namespace android { } }; - void Layer::setFilter(jni::JNIEnv& env, jni::Array<jni::Object<>> jfilter) { + void Layer::setFilter(jni::JNIEnv& env, const jni::Array<jni::Object<>>& jfilter) { using namespace mbgl::style; using namespace mbgl::style::conversion; Error error; - optional<Filter> converted = convert<Filter>(Value(env, jni::SeizeLocal(env, std::move(jfilter))), error); + optional<Filter> converted = convert<Filter>(Value(env, jfilter), error); if (!converted) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting filter: " + error.message); return; @@ -154,7 +154,7 @@ namespace android { } }; - jni::Object<gson::JsonElement> Layer::getFilter(jni::JNIEnv& env) { + jni::Local<jni::Object<gson::JsonElement>> Layer::getFilter(jni::JNIEnv& env) { using namespace mbgl::style; using namespace mbgl::style::conversion; @@ -163,7 +163,7 @@ namespace android { mbgl::Value expressionValue = (*filter.expression)->serialize(); return gson::JsonElement::New(env, expressionValue); } else { - return jni::Object<gson::JsonElement>(); + return jni::Local<jni::Object<gson::JsonElement>>(env, nullptr); } } @@ -181,7 +181,7 @@ namespace android { } }; - void Layer::setSourceLayer(jni::JNIEnv& env, jni::String sourceLayer) { + void Layer::setSourceLayer(jni::JNIEnv& env, const jni::String& sourceLayer) { layer.accept(SetSourceLayerEvaluator {jni::Make<std::string>(env, sourceLayer)}); } @@ -202,7 +202,7 @@ namespace android { } }; - jni::String Layer::getSourceLayer(jni::JNIEnv& env) { + jni::Local<jni::String> Layer::getSourceLayer(jni::JNIEnv& env) { return jni::Make<jni::String>(env, layer.accept(GetSourceLayerEvaluator())); } @@ -221,7 +221,7 @@ namespace android { } }; - jni::String Layer::getSourceId(jni::JNIEnv& env) { + jni::Local<jni::String> Layer::getSourceId(jni::JNIEnv& env) { return jni::Make<jni::String>(env, layer.accept(GetSourceIdEvaluator())); } @@ -241,14 +241,14 @@ namespace android { layer.setMaxZoom(zoom); } - jni::Object<jni::ObjectTag> Layer::getVisibility(jni::JNIEnv& env) { + jni::Local<jni::Object<>> Layer::getVisibility(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return jni::Object<jni::ObjectTag>(*convert<jni::jobject*>(env, layer.getVisibility())); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.getVisibility())); } void Layer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<Layer>::Singleton(env); + static auto& javaClass = jni::Class<Layer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs index 7dbb031b25..875bc88bc0 100644 --- a/platform/android/src/style/layers/layer.cpp.ejs +++ b/platform/android/src/style/layers/layer.cpp.ejs @@ -18,13 +18,13 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String layerId) + <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String& layerId) : Layer(env, std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId))) { <% } else { -%> /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { <% } -%> } @@ -49,29 +49,27 @@ namespace android { <% for (const property of properties) { -%> <% if (property.name != 'heatmap-color') { -%> - jni::Object<jni::ObjectTag> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) { + jni::Local<jni::Object<>> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::<%- camelize(type) %>Layer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::<%- camelize(type) %>Layer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>())); } <% } else { -%> - jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor(); if (propertyValue.isUndefined()) { propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor(); } - Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, propertyValue)); } <% } -%> <% if (property.transition) { -%> - jni::Object<TransitionOptions> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::<%- camelize(type) %>Layer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void <%- camelize(type) %>Layer::set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -84,15 +82,15 @@ namespace android { <% } -%> <% } -%> - jni::jobject* <%- camelize(type) %>Layer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); + jni::Local<jni::Object<Layer>> <%- camelize(type) %>Layer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void <%- camelize(type) %>Layer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); + static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) @@ -100,9 +98,9 @@ namespace android { jni::RegisterNativePeer<<%- camelize(type) %>Layer>( env, javaClass, "nativePtr", <% if (type === 'background') { -%> - std::make_unique<<%- camelize(type) %>Layer, JNIEnv&, jni::String>, + jni::MakePeer<<%- camelize(type) %>Layer, jni::String&>, <% } else { -%> - std::make_unique<<%- camelize(type) %>Layer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<<%- camelize(type) %>Layer, jni::String&, jni::String&>, <% } -%> "initialize", "finalize",<% for(var i = 0; i < properties.length; i++) {%> diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index 8112dd18d6..cee1b5a64e 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -36,7 +36,7 @@ public: virtual ~Layer(); - virtual jni::jobject* createJavaPeer(jni::JNIEnv&) = 0; + virtual jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&) = 0; /** * Set core layer (ie return ownership after remove) @@ -45,15 +45,15 @@ public: void addToMap(mbgl::Map&, mbgl::optional<std::string>); - jni::String getId(jni::JNIEnv&); + jni::Local<jni::String> getId(jni::JNIEnv&); - jni::String getSourceId(jni::JNIEnv&); + jni::Local<jni::String> getSourceId(jni::JNIEnv&); style::Layer& get(); - void setLayoutProperty(jni::JNIEnv&, jni::String, jni::Object<> value); + void setLayoutProperty(jni::JNIEnv&, const jni::String&, const jni::Object<>& value); - void setPaintProperty(jni::JNIEnv&, jni::String, jni::Object<> value); + void setPaintProperty(jni::JNIEnv&, const jni::String&, const jni::Object<>& value); // Zoom @@ -67,17 +67,17 @@ public: /* common properties, but not shared by all */ - void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>); + void setFilter(jni::JNIEnv&, const jni::Array<jni::Object<>>&); - jni::Object<gson::JsonElement> getFilter(jni::JNIEnv&); + jni::Local<jni::Object<gson::JsonElement>> getFilter(jni::JNIEnv&); - void setSourceLayer(jni::JNIEnv&, jni::String); + void setSourceLayer(jni::JNIEnv&, const jni::String&); - jni::String getSourceLayer(jni::JNIEnv&); + jni::Local<jni::String> getSourceLayer(jni::JNIEnv&); // Property getters - jni::Object<jni::ObjectTag> getVisibility(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getVisibility(jni::JNIEnv&); protected: // Release the owned view and return it diff --git a/platform/android/src/style/layers/layer.hpp.ejs b/platform/android/src/style/layers/layer.hpp.ejs index dd599d71df..5ceab0dcfa 100644 --- a/platform/android/src/style/layers/layer.hpp.ejs +++ b/platform/android/src/style/layers/layer.hpp.ejs @@ -16,15 +16,15 @@ namespace android { class <%- camelize(type) %>Layer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/<%- camelize(type) %>Layer"; }; static void registerNative(jni::JNIEnv&); <% if (type === 'background') { -%> - <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String); + <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String&); <% } else { -%> - <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String, jni::String); + <%- camelize(type) %>Layer(jni::JNIEnv&, jni::String&, jni::String&); <% } -%> <%- camelize(type) %>Layer(mbgl::Map&, mbgl::style::<%- camelize(type) %>Layer&); @@ -36,13 +36,13 @@ public: // Properties <% for (const property of properties) { -%> - jni::Object<jni::ObjectTag> get<%- camelize(property.name) %>(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> get<%- camelize(property.name) %>(jni::JNIEnv&); <% if (property.transition) { -%> void set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> get<%- camelize(property.name) %>Transition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> get<%- camelize(property.name) %>Transition(jni::JNIEnv&); <% } -%> <% } -%> - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class <%- camelize(type) %>Layer diff --git a/platform/android/src/style/layers/layers.cpp b/platform/android/src/style/layers/layers.cpp index 5df689b45d..232e92a7c7 100644 --- a/platform/android/src/style/layers/layers.cpp +++ b/platform/android/src/style/layers/layers.cpp @@ -77,16 +77,16 @@ static Layer* initializeLayerPeer(Map& map, std::unique_ptr<mbgl::style::Layer> return layer ? layer : new UnknownLayer(map, std::move(coreLayer)); } -jni::jobject* createJavaLayerPeer(jni::JNIEnv& env, Map& map, style::Layer& coreLayer) { +jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv& env, Map& map, style::Layer& coreLayer) { std::unique_ptr<Layer> peerLayer = std::unique_ptr<Layer>(initializeLayerPeer(map, coreLayer)); - jni::jobject* result = peerLayer->createJavaPeer(env); + jni::Local<jni::Object<Layer>> result = peerLayer->createJavaPeer(env); peerLayer.release(); return result; } -jni::jobject* createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> coreLayer) { +jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> coreLayer) { std::unique_ptr<Layer> peerLayer = std::unique_ptr<Layer>(initializeLayerPeer(map, std::move(coreLayer))); - jni::jobject* result = peerLayer->createJavaPeer(env); + jni::Local<jni::Object<Layer>> result = peerLayer->createJavaPeer(env); peerLayer.release(); return result; } diff --git a/platform/android/src/style/layers/layers.hpp b/platform/android/src/style/layers/layers.hpp index 75863a324a..c9a6ba2e66 100644 --- a/platform/android/src/style/layers/layers.hpp +++ b/platform/android/src/style/layers/layers.hpp @@ -13,12 +13,12 @@ namespace android { /** * Create a non-owning peer */ -jni::jobject* createJavaLayerPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Layer&); +jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Layer&); /** * Create an owning peer */ -jni::jobject* createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer>); +jni::Local<jni::Object<Layer>> createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer>); void registerNativeLayers(jni::JNIEnv&); diff --git a/platform/android/src/style/layers/line_layer.cpp b/platform/android/src/style/layers/line_layer.cpp index 2656bd9c09..376e4aafc0 100644 --- a/platform/android/src/style/layers/line_layer.cpp +++ b/platform/android/src/style/layers/line_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - LineLayer::LineLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + LineLayer::LineLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::LineLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,40 +35,35 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> LineLayer::getLineCap(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineCap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineCap()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineCap())); } - jni::Object<jni::ObjectTag> LineLayer::getLineJoin(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineJoin(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineJoin()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineJoin())); } - jni::Object<jni::ObjectTag> LineLayer::getLineMiterLimit(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineMiterLimit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineMiterLimit()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineMiterLimit())); } - jni::Object<jni::ObjectTag> LineLayer::getLineRoundLimit(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineRoundLimit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineRoundLimit()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineRoundLimit())); } - jni::Object<jni::ObjectTag> LineLayer::getLineOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOpacity())); } - jni::Object<TransitionOptions> LineLayer::getLineOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -78,16 +73,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineOpacityTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineColor())); } - jni::Object<TransitionOptions> LineLayer::getLineColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -97,16 +91,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineColorTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineTranslate())); } - jni::Object<TransitionOptions> LineLayer::getLineTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -116,22 +109,20 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineTranslateTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineTranslateAnchor())); } - jni::Object<jni::ObjectTag> LineLayer::getLineWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineWidth())); } - jni::Object<TransitionOptions> LineLayer::getLineWidthTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineWidthTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineWidthTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -141,16 +132,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineWidthTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineGapWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineGapWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineGapWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineGapWidth())); } - jni::Object<TransitionOptions> LineLayer::getLineGapWidthTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineGapWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineGapWidthTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineGapWidthTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -160,16 +150,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineGapWidthTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineOffset(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOffset()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOffset())); } - jni::Object<TransitionOptions> LineLayer::getLineOffsetTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineOffsetTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineOffsetTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineOffsetTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -179,16 +168,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineOffsetTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineBlur(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineBlur()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineBlur())); } - jni::Object<TransitionOptions> LineLayer::getLineBlurTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineBlurTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineBlurTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -198,16 +186,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineBlurTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineDasharray(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineDasharray(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineDasharray()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineDasharray())); } - jni::Object<TransitionOptions> LineLayer::getLineDasharrayTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLineDasharrayTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLineDasharrayTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLineDasharrayTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -217,16 +204,15 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLineDasharrayTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLinePattern(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLinePattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLinePattern()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLinePattern())); } - jni::Object<TransitionOptions> LineLayer::getLinePatternTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> LineLayer::getLinePatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::LineLayer>()->LineLayer::getLinePatternTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void LineLayer::setLinePatternTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -236,29 +222,28 @@ namespace android { layer.as<mbgl::style::LineLayer>()->LineLayer::setLinePatternTransition(options); } - jni::Object<jni::ObjectTag> LineLayer::getLineGradient(jni::JNIEnv& env) { + jni::Local<jni::Object<>> LineLayer::getLineGradient(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineGradient()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::LineLayer>()->LineLayer::getLineGradient())); } - jni::jobject* LineLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<LineLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> LineLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<LineLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void LineLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<LineLayer>::Singleton(env); + static auto& javaClass = jni::Class<LineLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<LineLayer>( env, javaClass, "nativePtr", - std::make_unique<LineLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<LineLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&LineLayer::getLineCap, "nativeGetLineCap"), diff --git a/platform/android/src/style/layers/line_layer.hpp b/platform/android/src/style/layers/line_layer.hpp index 4d1e759c1b..01be481958 100644 --- a/platform/android/src/style/layers/line_layer.hpp +++ b/platform/android/src/style/layers/line_layer.hpp @@ -12,12 +12,12 @@ namespace android { class LineLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/LineLayer"; }; static void registerNative(jni::JNIEnv&); - LineLayer(jni::JNIEnv&, jni::String, jni::String); + LineLayer(jni::JNIEnv&, jni::String&, jni::String&); LineLayer(mbgl::Map&, mbgl::style::LineLayer&); @@ -27,54 +27,54 @@ public: // Properties - jni::Object<jni::ObjectTag> getLineCap(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineCap(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineJoin(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineJoin(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineMiterLimit(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineMiterLimit(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineRoundLimit(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineRoundLimit(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineOpacity(jni::JNIEnv&); void setLineOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineColor(jni::JNIEnv&); void setLineColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineTranslate(jni::JNIEnv&); void setLineTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineTranslateAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineWidth(jni::JNIEnv&); void setLineWidthTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineWidthTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineWidthTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineGapWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineGapWidth(jni::JNIEnv&); void setLineGapWidthTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineGapWidthTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineGapWidthTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineOffset(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineOffset(jni::JNIEnv&); void setLineOffsetTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineOffsetTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineOffsetTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineBlur(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineBlur(jni::JNIEnv&); void setLineBlurTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineBlurTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineBlurTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineDasharray(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineDasharray(jni::JNIEnv&); void setLineDasharrayTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLineDasharrayTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLineDasharrayTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLinePattern(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLinePattern(jni::JNIEnv&); void setLinePatternTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getLinePatternTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getLinePatternTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getLineGradient(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getLineGradient(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class LineLayer diff --git a/platform/android/src/style/layers/raster_layer.cpp b/platform/android/src/style/layers/raster_layer.cpp index c52891b662..5a3579bc37 100644 --- a/platform/android/src/style/layers/raster_layer.cpp +++ b/platform/android/src/style/layers/raster_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - RasterLayer::RasterLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + RasterLayer::RasterLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::RasterLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,16 +35,15 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> RasterLayer::getRasterOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterOpacity())); } - jni::Object<TransitionOptions> RasterLayer::getRasterOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -54,16 +53,15 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterOpacityTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterHueRotate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterHueRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterHueRotate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterHueRotate())); } - jni::Object<TransitionOptions> RasterLayer::getRasterHueRotateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterHueRotateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterHueRotateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterHueRotateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -73,16 +71,15 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterHueRotateTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterBrightnessMin(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterBrightnessMin(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMin()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMin())); } - jni::Object<TransitionOptions> RasterLayer::getRasterBrightnessMinTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterBrightnessMinTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMinTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterBrightnessMinTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -92,16 +89,15 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterBrightnessMinTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterBrightnessMax(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterBrightnessMax(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMax()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMax())); } - jni::Object<TransitionOptions> RasterLayer::getRasterBrightnessMaxTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterBrightnessMaxTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterBrightnessMaxTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterBrightnessMaxTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -111,16 +107,15 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterBrightnessMaxTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterSaturation(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterSaturation(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterSaturation()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterSaturation())); } - jni::Object<TransitionOptions> RasterLayer::getRasterSaturationTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterSaturationTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterSaturationTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterSaturationTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -130,16 +125,15 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterSaturationTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterContrast(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterContrast(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterContrast()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterContrast())); } - jni::Object<TransitionOptions> RasterLayer::getRasterContrastTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> RasterLayer::getRasterContrastTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterContrastTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void RasterLayer::setRasterContrastTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -149,35 +143,33 @@ namespace android { layer.as<mbgl::style::RasterLayer>()->RasterLayer::setRasterContrastTransition(options); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterResampling(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterResampling(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterResampling()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterResampling())); } - jni::Object<jni::ObjectTag> RasterLayer::getRasterFadeDuration(jni::JNIEnv& env) { + jni::Local<jni::Object<>> RasterLayer::getRasterFadeDuration(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterFadeDuration()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::RasterLayer>()->RasterLayer::getRasterFadeDuration())); } - jni::jobject* RasterLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<RasterLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> RasterLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<RasterLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void RasterLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<RasterLayer>::Singleton(env); + static auto& javaClass = jni::Class<RasterLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<RasterLayer>( env, javaClass, "nativePtr", - std::make_unique<RasterLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<RasterLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&RasterLayer::getRasterOpacityTransition, "nativeGetRasterOpacityTransition"), diff --git a/platform/android/src/style/layers/raster_layer.hpp b/platform/android/src/style/layers/raster_layer.hpp index 4e268c36e5..40cc47634e 100644 --- a/platform/android/src/style/layers/raster_layer.hpp +++ b/platform/android/src/style/layers/raster_layer.hpp @@ -12,12 +12,12 @@ namespace android { class RasterLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/RasterLayer"; }; static void registerNative(jni::JNIEnv&); - RasterLayer(jni::JNIEnv&, jni::String, jni::String); + RasterLayer(jni::JNIEnv&, jni::String&, jni::String&); RasterLayer(mbgl::Map&, mbgl::style::RasterLayer&); @@ -27,34 +27,34 @@ public: // Properties - jni::Object<jni::ObjectTag> getRasterOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterOpacity(jni::JNIEnv&); void setRasterOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterHueRotate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterHueRotate(jni::JNIEnv&); void setRasterHueRotateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterHueRotateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterHueRotateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterBrightnessMin(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterBrightnessMin(jni::JNIEnv&); void setRasterBrightnessMinTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterBrightnessMinTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterBrightnessMinTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterBrightnessMax(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterBrightnessMax(jni::JNIEnv&); void setRasterBrightnessMaxTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterBrightnessMaxTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterBrightnessMaxTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterSaturation(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterSaturation(jni::JNIEnv&); void setRasterSaturationTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterSaturationTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterSaturationTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterContrast(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterContrast(jni::JNIEnv&); void setRasterContrastTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getRasterContrastTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getRasterContrastTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterResampling(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterResampling(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getRasterFadeDuration(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getRasterFadeDuration(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class RasterLayer diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp index 953c73e221..a0f37c91d2 100644 --- a/platform/android/src/style/layers/symbol_layer.cpp +++ b/platform/android/src/style/layers/symbol_layer.cpp @@ -13,7 +13,7 @@ namespace android { /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ - SymbolLayer::SymbolLayer(jni::JNIEnv& env, jni::String layerId, jni::String sourceId) + SymbolLayer::SymbolLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) : Layer(env, std::make_unique<mbgl::style::SymbolLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } @@ -35,232 +35,195 @@ namespace android { // Property getters - jni::Object<jni::ObjectTag> SymbolLayer::getSymbolPlacement(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getSymbolPlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolPlacement()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolPlacement())); } - jni::Object<jni::ObjectTag> SymbolLayer::getSymbolSpacing(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getSymbolSpacing(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolSpacing()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolSpacing())); } - jni::Object<jni::ObjectTag> SymbolLayer::getSymbolAvoidEdges(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getSymbolAvoidEdges(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolAvoidEdges()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getSymbolAvoidEdges())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconAllowOverlap(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconAllowOverlap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconAllowOverlap()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconAllowOverlap())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconIgnorePlacement(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconIgnorePlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconIgnorePlacement()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconIgnorePlacement())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconOptional(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconOptional(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOptional()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOptional())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconRotationAlignment(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconRotationAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconRotationAlignment()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconRotationAlignment())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconSize(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconSize(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconSize()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconSize())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconTextFit(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconTextFit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTextFit()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTextFit())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconTextFitPadding(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconTextFitPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTextFitPadding()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTextFitPadding())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconImage(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconImage(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconImage()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconImage())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconRotate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconRotate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconRotate())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconPadding(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconPadding()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconPadding())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconKeepUpright(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconKeepUpright(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconKeepUpright()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconKeepUpright())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconOffset(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOffset()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOffset())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconAnchor())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconPitchAlignment(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconPitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconPitchAlignment()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconPitchAlignment())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextPitchAlignment(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextPitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextPitchAlignment()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextPitchAlignment())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextRotationAlignment(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextRotationAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextRotationAlignment()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextRotationAlignment())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextField(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextField(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextField()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextField())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextFont(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextFont(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextFont()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextFont())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextSize(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextSize(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextSize()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextSize())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextMaxWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextMaxWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextMaxWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextMaxWidth())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextLineHeight(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextLineHeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextLineHeight()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextLineHeight())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextLetterSpacing(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextLetterSpacing(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextLetterSpacing()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextLetterSpacing())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextJustify(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextJustify(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextJustify()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextJustify())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextAnchor())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextMaxAngle(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextMaxAngle(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextMaxAngle()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextMaxAngle())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextRotate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextRotate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextRotate())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextPadding(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextPadding()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextPadding())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextKeepUpright(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextKeepUpright(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextKeepUpright()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextKeepUpright())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextTransform(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextTransform(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTransform()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTransform())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextOffset(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOffset()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOffset())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextAllowOverlap(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextAllowOverlap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextAllowOverlap()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextAllowOverlap())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextIgnorePlacement(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextIgnorePlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextIgnorePlacement()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextIgnorePlacement())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextOptional(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextOptional(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOptional()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOptional())); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOpacity())); } - jni::Object<TransitionOptions> SymbolLayer::getIconOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -270,16 +233,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconOpacityTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconColor())); } - jni::Object<TransitionOptions> SymbolLayer::getIconColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -289,16 +251,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconColorTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconHaloColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconHaloColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloColor())); } - jni::Object<TransitionOptions> SymbolLayer::getIconHaloColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconHaloColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconHaloColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -308,16 +269,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconHaloColorTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconHaloWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconHaloWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloWidth())); } - jni::Object<TransitionOptions> SymbolLayer::getIconHaloWidthTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconHaloWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloWidthTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconHaloWidthTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -327,16 +287,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconHaloWidthTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconHaloBlur(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconHaloBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloBlur()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloBlur())); } - jni::Object<TransitionOptions> SymbolLayer::getIconHaloBlurTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconHaloBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconHaloBlurTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconHaloBlurTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -346,16 +305,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconHaloBlurTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTranslate())); } - jni::Object<TransitionOptions> SymbolLayer::getIconTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getIconTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setIconTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -365,22 +323,20 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setIconTranslateTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getIconTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getIconTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getIconTranslateAnchor())); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextOpacity(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOpacity()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOpacity())); } - jni::Object<TransitionOptions> SymbolLayer::getTextOpacityTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextOpacityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -390,16 +346,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextOpacityTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextColor())); } - jni::Object<TransitionOptions> SymbolLayer::getTextColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -409,16 +364,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextColorTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextHaloColor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextHaloColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloColor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloColor())); } - jni::Object<TransitionOptions> SymbolLayer::getTextHaloColorTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextHaloColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextHaloColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -428,16 +382,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextHaloColorTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextHaloWidth(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextHaloWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloWidth()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloWidth())); } - jni::Object<TransitionOptions> SymbolLayer::getTextHaloWidthTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextHaloWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloWidthTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextHaloWidthTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -447,16 +400,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextHaloWidthTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextHaloBlur(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextHaloBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloBlur()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloBlur())); } - jni::Object<TransitionOptions> SymbolLayer::getTextHaloBlurTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextHaloBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextHaloBlurTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextHaloBlurTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -466,16 +418,15 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextHaloBlurTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextTranslate(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTranslate()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTranslate())); } - jni::Object<TransitionOptions> SymbolLayer::getTextTranslateTransition(jni::JNIEnv& env) { + jni::Local<jni::Object<TransitionOptions>> SymbolLayer::getTextTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTranslateTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void SymbolLayer::setTextTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -485,29 +436,28 @@ namespace android { layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::setTextTranslateTransition(options); } - jni::Object<jni::ObjectTag> SymbolLayer::getTextTranslateAnchor(jni::JNIEnv& env) { + jni::Local<jni::Object<>> SymbolLayer::getTextTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTranslateAnchor()); - return jni::Object<jni::ObjectTag>(*converted); + return std::move(*convert<jni::Local<jni::Object<>>>(env, layer.as<mbgl::style::SymbolLayer>()->SymbolLayer::getTextTranslateAnchor())); } - jni::jobject* SymbolLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<SymbolLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> SymbolLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<SymbolLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void SymbolLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<SymbolLayer>::Singleton(env); + static auto& javaClass = jni::Class<SymbolLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<SymbolLayer>( env, javaClass, "nativePtr", - std::make_unique<SymbolLayer, JNIEnv&, jni::String, jni::String>, + jni::MakePeer<SymbolLayer, jni::String&, jni::String&>, "initialize", "finalize", METHOD(&SymbolLayer::getSymbolPlacement, "nativeGetSymbolPlacement"), diff --git a/platform/android/src/style/layers/symbol_layer.hpp b/platform/android/src/style/layers/symbol_layer.hpp index 3835e01bf1..206a6546c3 100644 --- a/platform/android/src/style/layers/symbol_layer.hpp +++ b/platform/android/src/style/layers/symbol_layer.hpp @@ -12,12 +12,12 @@ namespace android { class SymbolLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/SymbolLayer"; }; static void registerNative(jni::JNIEnv&); - SymbolLayer(jni::JNIEnv&, jni::String, jni::String); + SymbolLayer(jni::JNIEnv&, jni::String&, jni::String&); SymbolLayer(mbgl::Map&, mbgl::style::SymbolLayer&); @@ -27,130 +27,130 @@ public: // Properties - jni::Object<jni::ObjectTag> getSymbolPlacement(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getSymbolPlacement(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getSymbolSpacing(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getSymbolSpacing(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getSymbolAvoidEdges(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getSymbolAvoidEdges(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconAllowOverlap(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconAllowOverlap(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconIgnorePlacement(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconIgnorePlacement(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconOptional(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconOptional(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconRotationAlignment(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconRotationAlignment(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconSize(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconSize(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconTextFit(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconTextFit(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconTextFitPadding(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconTextFitPadding(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconImage(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconImage(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconRotate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconRotate(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconPadding(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconPadding(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconKeepUpright(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconKeepUpright(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconOffset(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconOffset(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconPitchAlignment(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconPitchAlignment(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextPitchAlignment(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextPitchAlignment(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextRotationAlignment(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextRotationAlignment(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextField(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextField(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextFont(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextFont(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextSize(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextSize(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextMaxWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextMaxWidth(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextLineHeight(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextLineHeight(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextLetterSpacing(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextLetterSpacing(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextJustify(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextJustify(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextMaxAngle(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextMaxAngle(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextRotate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextRotate(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextPadding(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextPadding(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextKeepUpright(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextKeepUpright(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextTransform(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextTransform(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextOffset(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextOffset(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextAllowOverlap(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextAllowOverlap(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextIgnorePlacement(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextIgnorePlacement(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextOptional(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextOptional(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconOpacity(jni::JNIEnv&); void setIconOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconColor(jni::JNIEnv&); void setIconColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconHaloColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconHaloColor(jni::JNIEnv&); void setIconHaloColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconHaloColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconHaloColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconHaloWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconHaloWidth(jni::JNIEnv&); void setIconHaloWidthTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconHaloWidthTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconHaloWidthTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconHaloBlur(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconHaloBlur(jni::JNIEnv&); void setIconHaloBlurTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconHaloBlurTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconHaloBlurTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconTranslate(jni::JNIEnv&); void setIconTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIconTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIconTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getIconTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getIconTranslateAnchor(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextOpacity(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextOpacity(jni::JNIEnv&); void setTextOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextOpacityTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextOpacityTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextColor(jni::JNIEnv&); void setTextColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextHaloColor(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextHaloColor(jni::JNIEnv&); void setTextHaloColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextHaloColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextHaloColorTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextHaloWidth(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextHaloWidth(jni::JNIEnv&); void setTextHaloWidthTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextHaloWidthTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextHaloWidthTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextHaloBlur(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextHaloBlur(jni::JNIEnv&); void setTextHaloBlurTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextHaloBlurTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextHaloBlurTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextTranslate(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextTranslate(jni::JNIEnv&); void setTextTranslateTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getTextTranslateTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getTextTranslateTransition(jni::JNIEnv&); - jni::Object<jni::ObjectTag> getTextTranslateAnchor(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextTranslateAnchor(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class SymbolLayer diff --git a/platform/android/src/style/layers/unknown_layer.cpp b/platform/android/src/style/layers/unknown_layer.cpp index 9f877e4896..5c770012bd 100644 --- a/platform/android/src/style/layers/unknown_layer.cpp +++ b/platform/android/src/style/layers/unknown_layer.cpp @@ -22,15 +22,15 @@ namespace android { : Layer(map, std::move(coreLayer)) { } - jni::jobject* UnknownLayer::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<UnknownLayer>::Singleton(env); + jni::Local<jni::Object<Layer>> UnknownLayer::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<UnknownLayer>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } void UnknownLayer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<UnknownLayer>::Singleton(env); + static auto& javaClass = jni::Class<UnknownLayer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) diff --git a/platform/android/src/style/layers/unknown_layer.hpp b/platform/android/src/style/layers/unknown_layer.hpp index 0610c843f1..692e2f5db4 100644 --- a/platform/android/src/style/layers/unknown_layer.hpp +++ b/platform/android/src/style/layers/unknown_layer.hpp @@ -9,7 +9,7 @@ namespace android { class UnknownLayer : public Layer { public: - + using SuperTag = Layer; static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/UnknownLayer"; }; static void registerNative(jni::JNIEnv&); @@ -20,7 +20,7 @@ public: ~UnknownLayer() = default; - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv&); }; // class UnknownLayer diff --git a/platform/android/src/style/light.cpp b/platform/android/src/style/light.cpp index 64afb89204..d8ed4d9d96 100644 --- a/platform/android/src/style/light.cpp +++ b/platform/android/src/style/light.cpp @@ -1,5 +1,3 @@ -// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. - #include <mbgl/map/map.hpp> #include "light.hpp" #include "conversion/transition_options.hpp" @@ -16,20 +14,20 @@ static Light* initializeLightPeer(mbgl::Map& map, mbgl::style::Light& coreLight) return new Light(map, coreLight); } -jni::jobject* Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style::Light& coreLight) { +jni::Local<jni::Object<Light>> Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style::Light& coreLight) { std::unique_ptr<Light> peerLight = std::unique_ptr<Light>(initializeLightPeer(map, coreLight)); - jni::jobject* result = peerLight->createJavaPeer(env); + auto result = peerLight->createJavaPeer(env); peerLight.release(); return result; } -jni::jobject* Light::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<Light>::Singleton(env); +jni::Local<jni::Object<Light>> Light::createJavaPeer(jni::JNIEnv& env) { + static auto& javaClass = jni::Class<Light>::Singleton(env); static auto constructor = javaClass.GetConstructor<jni::jlong>(env); return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); } -void Light::setAnchor(jni::JNIEnv& env, jni::String property) { +void Light::setAnchor(jni::JNIEnv& env, const jni::String& property) { std::string anchorStr = jni::Make<std::string>(env, property); if (anchorStr.compare("map") == 0) { light.setAnchor(LightAnchorType::Map); @@ -38,7 +36,7 @@ void Light::setAnchor(jni::JNIEnv& env, jni::String property) { } } -jni::String Light::getAnchor(jni::JNIEnv& env) { +jni::Local<jni::String> Light::getAnchor(jni::JNIEnv& env) { auto anchorType = light.getAnchor(); if (anchorType == LightAnchorType::Map) { return jni::Make<jni::String>(env, "map"); @@ -47,22 +45,22 @@ jni::String Light::getAnchor(jni::JNIEnv& env) { } } -void Light::setPosition(jni::JNIEnv& env, jni::Object<Position> jposition) { +void Light::setPosition(jni::JNIEnv& env, const jni::Object<Position>& jposition) { using namespace mbgl::android::conversion; auto position = *convert<mbgl::style::Position>(env, jposition); light.setPosition(position); } -jni::Object<Position> Light::getPosition(jni::JNIEnv& env) { +jni::Local<jni::Object<Position>> Light::getPosition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::Position position = light.getPosition().asConstant(); - return *convert<jni::Object<Position>>(env, position); + return std::move(*convert<jni::Local<jni::Object<Position>>>(env, position)); } -jni::Object<TransitionOptions> Light::getPositionTransition(jni::JNIEnv& env) { +jni::Local<jni::Object<TransitionOptions>> Light::getPositionTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getPositionTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void Light::setPositionTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -72,22 +70,22 @@ void Light::setPositionTransition(jni::JNIEnv&, jlong duration, jlong delay) { light.setPositionTransition(options); } -void Light::setColor(jni::JNIEnv& env, jni::String property) { +void Light::setColor(jni::JNIEnv& env, const jni::String& property) { auto color = Color::parse(jni::Make<std::string>(env, property)); if (color) { light.setColor(color.value()); } } -jni::String Light::getColor(jni::JNIEnv &env) { +jni::Local<jni::String> Light::getColor(jni::JNIEnv &env) { auto color = light.getColor().asConstant(); return jni::Make<jni::String>(env, color.stringify()); } -jni::Object<TransitionOptions> Light::getColorTransition(jni::JNIEnv& env) { +jni::Local<jni::Object<TransitionOptions>> Light::getColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getColorTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void Light::setColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -105,10 +103,10 @@ jni::jfloat Light::getIntensity(jni::JNIEnv&) { return light.getIntensity().asConstant(); } -jni::Object<TransitionOptions> Light::getIntensityTransition(jni::JNIEnv& env) { +jni::Local<jni::Object<TransitionOptions>> Light::getIntensityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getIntensityTransition(); - return *convert<jni::Object<TransitionOptions>>(env, options); + return std::move(*convert<jni::Local<jni::Object<TransitionOptions>>>(env, options)); } void Light::setIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay) { @@ -120,7 +118,7 @@ void Light::setIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay) { void Light::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<Light>::Singleton(env); + static auto& javaClass = jni::Class<Light>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer diff --git a/platform/android/src/style/light.cpp.ejs b/platform/android/src/style/light.cpp.ejs deleted file mode 100644 index f18dc57a4f..0000000000 --- a/platform/android/src/style/light.cpp.ejs +++ /dev/null @@ -1,122 +0,0 @@ -<% - const properties = locals.properties; --%> -// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. - -#include <mbgl/map/map.hpp> -#include "light.hpp" -#include "conversion/transition_options.hpp" -#include "conversion/position.hpp" - -namespace mbgl { -namespace android { - -Light::Light(mbgl::Map& coreMap, mbgl::style::Light& coreLight) - : light(coreLight) , map(&coreMap) { -} - -static Light* initializeLightPeer(mbgl::Map& map, mbgl::style::Light& coreLight) { - return new Light(map, coreLight); -} - -jni::jobject* Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style::Light& coreLight) { - std::unique_ptr<Light> peerLight = std::unique_ptr<Light>(initializeLightPeer(map, coreLight)); - jni::jobject* result = peerLight->createJavaPeer(env); - peerLight.release(); - return result; -} - -jni::jobject* Light::createJavaPeer(jni::JNIEnv& env) { - static auto javaClass = jni::Class<Light>::Singleton(env); - static auto constructor = javaClass.GetConstructor<jni::jlong>(env); - return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); -} - -<% for (const property of properties) { -%> -<% if (property.name == "position") { -%> -void Light::set<%- camelize(property.name) %>(jni::JNIEnv& env, jni::Object<<%- camelize(property.name) %>> j<%- property.name %>) { - using namespace mbgl::android::conversion; - auto position = *convert<mbgl::style::<%- camelize(property.name) %>>(env, jposition); - light.set<%- camelize(property.name) %>(<%- property.name %>); -} - -jni::Object<Position> Light::get<%- camelize(property.name) %>(jni::JNIEnv& env) { - using namespace mbgl::android::conversion; - mbgl::style::<%- camelize(property.name) %> <%- property.name %> = light.get<%- camelize(property.name) %>().asConstant(); - return *convert<jni::Object<<%- camelize(property.name) %>>>(env, <%- property.name %>); -} -<% } else { -%> -<% if(property.name == "color") {-%> -void Light::set<%- camelize(property.name) %>(jni::JNIEnv& env, jni::<%- propertyJNIType(property) %> property) { - auto color = Color::parse(jni::Make<std::string>(env, property)); - if (color) { - light.set<%- camelize(property.name) %>(color.value()); - } -} - -jni::String Light::get<%- camelize(property.name) %>(jni::JNIEnv &env) { - auto color = light.get<%- camelize(property.name) %>().asConstant(); - return jni::Make<jni::String>(env, color.stringify()); -} -<% } else if(property.name == "anchor"){ -%> -void Light::set<%- camelize(property.name) %>(jni::JNIEnv& env, jni::<%- propertyJNIType(property) %> property) { - std::string anchorStr = jni::Make<std::string>(env, property); - if (anchorStr.compare("map") == 0) { - light.setAnchor(LightAnchorType::Map); - } else if (anchorStr.compare("viewport") == 0) { - light.setAnchor(LightAnchorType::Viewport); - } -} - -jni::String Light::getAnchor(jni::JNIEnv& env) { - auto anchorType = light.getAnchor(); - if (anchorType == LightAnchorType::Map) { - return jni::Make<jni::String>(env, "map"); - } else { - return jni::Make<jni::String>(env, "viewport"); - } -} -<% } else { -%> -void Light::set<%- camelize(property.name) %>(jni::JNIEnv&, jni::<%- propertyJNIType(property) %> property) { - light.set<%- camelize(property.name) %>(property); -} - -jni::<%- propertyJNIType(property) %> Light::get<%- camelize(property.name) %>(jni::JNIEnv&) { - return light.get<%- camelize(property.name) %>().asConstant(); -} -<% } -%> -<% } -%> - -<% if (property.transition) { -%> -jni::Object<TransitionOptions> Light::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { - using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = light.get<%- camelize(property.name) %>Transition(); - return *convert<jni::Object<TransitionOptions>>(env, options); -} - -void Light::set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong duration, jlong delay) { - mbgl::style::TransitionOptions options; - options.duration.emplace(mbgl::Milliseconds(duration)); - options.delay.emplace(mbgl::Milliseconds(delay)); - light.set<%- camelize(property.name) %>Transition(options); -} - -<% } -%> -<% } -%> -void Light::registerNative(jni::JNIEnv& env) { - // Lookup the class - static auto javaClass = jni::Class<Light>::Singleton(env); - -#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) - // Register the peer - jni::RegisterNativePeer<Light>(env, javaClass, "nativePtr",<% for(var i = 0; i < properties.length; i++) {%> -<% if (properties[i].transition) { -%> - METHOD(&Light::get<%- camelize(properties[i].name) %>Transition, "nativeGet<%- camelize(properties[i].name) %>Transition"), - METHOD(&Light::set<%- camelize(properties[i].name) %>Transition, "nativeSet<%- camelize(properties[i].name) %>Transition"), -<% } -%> - METHOD(&Light::get<%- camelize(properties[i].name) %>, "nativeGet<%- camelize(properties[i].name) %>"), - METHOD(&Light::set<%- camelize(properties[i].name) %>, "nativeSet<%- camelize(properties[i].name) %>")<% if(i != (properties.length -1)) {-%>,<% } -%><% } -%>); -} - -} // namespace android -} // namespace mb diff --git a/platform/android/src/style/light.hpp b/platform/android/src/style/light.hpp index 2c314067be..97767c4f76 100644 --- a/platform/android/src/style/light.hpp +++ b/platform/android/src/style/light.hpp @@ -1,5 +1,3 @@ -// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. - #pragma once #include <mbgl/util/noncopyable.hpp> @@ -21,29 +19,27 @@ public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/light/Light"; }; - static jni::Class<Light> javaClass; - static void registerNative(jni::JNIEnv&); - static jni::jobject* createJavaLightPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Light&); + static jni::Local<jni::Object<Light>> createJavaLightPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Light&); Light(mbgl::Map&, mbgl::style::Light&); - void setAnchor(jni::JNIEnv&, jni::String); - jni::String getAnchor(jni::JNIEnv&); - void setPosition(jni::JNIEnv&, jni::Object<Position>); - jni::Object<Position> getPosition(jni::JNIEnv&); + void setAnchor(jni::JNIEnv&, const jni::String&); + jni::Local<jni::String> getAnchor(jni::JNIEnv&); + void setPosition(jni::JNIEnv&, const jni::Object<Position>&); + jni::Local<jni::Object<Position>> getPosition(jni::JNIEnv&); void setPositionTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getPositionTransition(jni::JNIEnv&); - void setColor(jni::JNIEnv&, jni::String); - jni::String getColor(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getPositionTransition(jni::JNIEnv&); + void setColor(jni::JNIEnv&, const jni::String&); + jni::Local<jni::String> getColor(jni::JNIEnv&); void setColorTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getColorTransition(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getColorTransition(jni::JNIEnv&); void setIntensity(jni::JNIEnv&, jni::jfloat); jni::jfloat getIntensity(jni::JNIEnv&); void setIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> getIntensityTransition(jni::JNIEnv&); - jni::jobject* createJavaPeer(jni::JNIEnv&); + jni::Local<jni::Object<TransitionOptions>> getIntensityTransition(jni::JNIEnv&); + jni::Local<jni::Object<Light>> createJavaPeer(jni::JNIEnv&); protected: diff --git a/platform/android/src/style/light.hpp.ejs b/platform/android/src/style/light.hpp.ejs deleted file mode 100644 index 18f961b9e0..0000000000 --- a/platform/android/src/style/light.hpp.ejs +++ /dev/null @@ -1,59 +0,0 @@ -<% - const properties = locals.properties; --%> -// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. - -#pragma once - -#include <mbgl/util/noncopyable.hpp> - -#include <jni/jni.hpp> -#include <mbgl/style/light.hpp> -#include "transition_options.hpp" -#include "position.hpp" -#include <mbgl/style/types.hpp> -#include <mbgl/style/property_value.hpp> - -namespace mbgl { -namespace android { - -using namespace style; - -class Light : private mbgl::util::noncopyable { -public: - - static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/light/Light"; }; - - static jni::Class<Light> javaClass; - - static void registerNative(jni::JNIEnv&); - - static jni::jobject* createJavaLightPeer(jni::JNIEnv&, mbgl::Map&, mbgl::style::Light&); - - Light(mbgl::Map&, mbgl::style::Light&); - -<% for (const property of properties) { -%> -<% if (property.name=="position") {-%> - void set<%- camelize(property.name) %>(jni::JNIEnv&, jni::Object<Position>); - jni::Object<<%- camelize(property.name) %>> get<%- camelize(property.name) %>(jni::JNIEnv&); -<% } else { -%> - void set<%- camelize(property.name) %>(jni::JNIEnv&, jni::<%- propertyJNIType(property) %>); - jni::<%- propertyJNIType(property) %> get<%- camelize(property.name) %>(jni::JNIEnv&); -<% } -%> -<% if (property.transition) { -%> - void set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong duration, jlong delay); - jni::Object<TransitionOptions> get<%- camelize(property.name) %>Transition(jni::JNIEnv&); -<% } -%> -<% } -%> - jni::jobject* createJavaPeer(jni::JNIEnv&); - -protected: - - // Raw reference to the light - mbgl::style::Light& light; - - // Map is set when the light is retrieved - mbgl::Map* map; -}; -} // namespace android -} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/style/position.cpp b/platform/android/src/style/position.cpp index c6918a2e9a..20a0c47dff 100644 --- a/platform/android/src/style/position.cpp +++ b/platform/android/src/style/position.cpp @@ -3,8 +3,8 @@ namespace mbgl { namespace android { -jni::Object<Position> Position::fromPosition(jni::JNIEnv& env, jfloat radialCoordinate, jfloat azimuthalAngle, jfloat polarAngle) { - static auto javaClass = jni::Class<Position>::Singleton(env); +jni::Local<jni::Object<Position>> Position::fromPosition(jni::JNIEnv& env, jfloat radialCoordinate, jfloat azimuthalAngle, jfloat polarAngle) { + static auto& javaClass = jni::Class<Position>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<Position> (jfloat, jfloat, jfloat)>(env, "fromPosition"); return javaClass.Call(env, method, radialCoordinate, azimuthalAngle, polarAngle); } @@ -13,20 +13,20 @@ void Position::registerNative(jni::JNIEnv& env) { jni::Class<Position>::Singleton(env); } -float Position::getRadialCoordinate(jni::JNIEnv& env, jni::Object<Position> position){ - static auto javaClass = jni::Class<Position>::Singleton(env); +float Position::getRadialCoordinate(jni::JNIEnv& env, const jni::Object<Position>& position) { + static auto& javaClass = jni::Class<Position>::Singleton(env); static auto field = javaClass.GetField<jfloat>(env, "radialCoordinate"); return position.Get(env, field); } -float Position::getAzimuthalAngle(jni::JNIEnv& env, jni::Object<Position> position){ - static auto javaClass = jni::Class<Position>::Singleton(env); +float Position::getAzimuthalAngle(jni::JNIEnv& env, const jni::Object<Position>& position) { + static auto& javaClass = jni::Class<Position>::Singleton(env); static auto field = javaClass.GetField<jfloat>(env, "azimuthalAngle"); return position.Get(env, field); } -float Position::getPolarAngle(jni::JNIEnv& env, jni::Object<Position> position){ - static auto javaClass = jni::Class<Position>::Singleton(env); +float Position::getPolarAngle(jni::JNIEnv& env, const jni::Object<Position>& position) { + static auto& javaClass = jni::Class<Position>::Singleton(env); static auto field = javaClass.GetField<jfloat>(env, "polarAngle"); return position.Get(env, field); } diff --git a/platform/android/src/style/position.hpp b/platform/android/src/style/position.hpp index 4f3738da9f..eb4f5ac674 100644 --- a/platform/android/src/style/position.hpp +++ b/platform/android/src/style/position.hpp @@ -11,13 +11,13 @@ class Position : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/light/Position"; }; - static jni::Object<Position> fromPosition(jni::JNIEnv&, jfloat, jfloat, jfloat); + static jni::Local<jni::Object<Position>> fromPosition(jni::JNIEnv&, jfloat, jfloat, jfloat); static void registerNative(jni::JNIEnv&); - static float getRadialCoordinate(jni::JNIEnv&, jni::Object<Position>); - static float getAzimuthalAngle(jni::JNIEnv&, jni::Object<Position>); - static float getPolarAngle(jni::JNIEnv&, jni::Object<Position>); + static float getRadialCoordinate(jni::JNIEnv&, const jni::Object<Position>&); + static float getAzimuthalAngle(jni::JNIEnv&, const jni::Object<Position>&); + static float getPolarAngle(jni::JNIEnv&, const jni::Object<Position>&); }; } // namespace android 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 diff --git a/platform/android/src/style/transition_options.cpp b/platform/android/src/style/transition_options.cpp index 84bd909125..b908c37089 100644 --- a/platform/android/src/style/transition_options.cpp +++ b/platform/android/src/style/transition_options.cpp @@ -3,8 +3,8 @@ namespace mbgl { namespace android { -jni::Object<TransitionOptions> TransitionOptions::fromTransitionOptions(jni::JNIEnv& env, jlong duration, jlong delay) { - static auto javaClass = jni::Class<TransitionOptions>::Singleton(env); +jni::Local<jni::Object<TransitionOptions>> TransitionOptions::fromTransitionOptions(jni::JNIEnv& env, jlong duration, jlong delay) { + static auto& javaClass = jni::Class<TransitionOptions>::Singleton(env); static auto method = javaClass.GetStaticMethod<jni::Object<TransitionOptions> (jlong, jlong)>(env, "fromTransitionOptions"); return javaClass.Call(env, method, duration, delay); } diff --git a/platform/android/src/style/transition_options.hpp b/platform/android/src/style/transition_options.hpp index 83276ca1d8..0bac43fa16 100644 --- a/platform/android/src/style/transition_options.hpp +++ b/platform/android/src/style/transition_options.hpp @@ -11,7 +11,7 @@ class TransitionOptions : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/TransitionOptions"; }; - static jni::Object<TransitionOptions> fromTransitionOptions(jni::JNIEnv&, jlong duration, jlong offset); + static jni::Local<jni::Object<TransitionOptions>> fromTransitionOptions(jni::JNIEnv&, jlong duration, jlong offset); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index 6cdf134931..f916909687 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -10,64 +10,67 @@ namespace android { : env(_env), value(std::move(_value)) {} + Value::Value(jni::JNIEnv& _env, const jni::Object<>& _value) + : env(_env), + value(jni::NewLocal(_env, _value)) {} + bool Value::isNull() const { return !value; } bool Value::isArray() const { - return jni::IsInstanceOf(env, value->Get(), *java::ObjectArray::jclass); + return jni::IsInstanceOf(env, value.get(), *java::ObjectArray::jclass); } bool Value::isObject() const { - return jni::IsInstanceOf(env, value->Get(), *java::Map::jclass); + return jni::IsInstanceOf(env, value.get(), *java::Map::jclass); } bool Value::isString() const { - return jni::IsInstanceOf(env, value->Get(), *java::String::jclass); + return jni::IsInstanceOf(env, value.get(), *java::String::jclass); } bool Value::isBool() const { - return jni::IsInstanceOf(env, value->Get(), *java::Boolean::jclass); + return jni::IsInstanceOf(env, value.get(), *java::Boolean::jclass); } bool Value::isNumber() const { - return jni::IsInstanceOf(env, value->Get(), *java::Number::jclass); + return jni::IsInstanceOf(env, value.get(), *java::Number::jclass); } std::string Value::toString() const { - jni::jstring* string = reinterpret_cast<jni::jstring*>(value->Get()); - return jni::Make<std::string>(env, jni::String(string)); + return jni::Make<std::string>(env, jni::Cast(env, jni::Class<jni::StringTag>::Singleton(env), value)); } float Value::toFloat() const { - return jni::CallMethod<jni::jfloat>(env, value->Get(), *java::Number::floatValueMethodId); + return jni::CallMethod<jni::jfloat>(env, value.get(), *java::Number::floatValueMethodId); } double Value::toDouble() const { - return jni::CallMethod<jni::jdouble>(env, value->Get(), *java::Number::doubleValueMethodId); + return jni::CallMethod<jni::jdouble>(env, value.get(), *java::Number::doubleValueMethodId); } long Value::toLong() const { - return jni::CallMethod<jni::jlong>(env, value->Get(), *java::Number::longValueMethodId); + return jni::CallMethod<jni::jlong>(env, value.get(), *java::Number::longValueMethodId); } bool Value::toBool() const { - return jni::CallMethod<jni::jboolean>(env, value->Get(), *java::Boolean::booleanValueMethodId); + return jni::CallMethod<jni::jboolean>(env, value.get(), *java::Boolean::booleanValueMethodId); } Value Value::get(const char* key) const { - jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value->Get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).Get()); - return Value(env, jni::SeizeLocal(env, jni::Object<>(member))); + jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value.get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).get()); + return Value(env, jni::Local<jni::Object<>>(env, member)); } int Value::getLength() const { - auto array = (jni::jarray<jni::jobject>*) value->Get(); + auto array = (jni::jarray<jni::jobject>*) value.get(); return jni::GetArrayLength(env, *array); } Value Value::get(const int index) const { - auto array = (jni::jarray<jni::jobject>*) value->Get(); - return Value(env, jni::SeizeLocal(env, jni::Object<>(jni::GetObjectArrayElement(env, *array, index)))); + auto array = (jni::jarray<jni::jobject>*) value.get(); + return Value(env, jni::Local<jni::Object<>>(env, jni::GetObjectArrayElement(env, *array, index))); } } } diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp index bd1c552be0..b3e665e57b 100644 --- a/platform/android/src/style/value.hpp +++ b/platform/android/src/style/value.hpp @@ -10,6 +10,7 @@ namespace android { class Value { public: Value(jni::JNIEnv&, jni::Local<jni::Object<>>); + Value(jni::JNIEnv&, const jni::Object<>&); Value(Value&&) = default; Value& operator=(Value&&) = default; |