From 1e53e9ab42401f0f21f56882b90a44ef5b2a244b Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 18 Oct 2017 14:35:11 -0700 Subject: Fix Android --- include/mbgl/style/conversion.hpp | 9 ++++++--- platform/android/src/style/android_conversion.hpp | 4 ++-- platform/android/src/style/conversion/filter.hpp | 3 +-- platform/android/src/style/conversion/url_or_tileset.hpp | 4 ++-- platform/android/src/style/layers/layer.cpp | 12 +++--------- platform/android/src/style/value.cpp | 2 -- platform/android/src/style/value.hpp | 8 ++++++-- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/include/mbgl/style/conversion.hpp b/include/mbgl/style/conversion.hpp index 2c75a71206..0b7e0b2b2f 100644 --- a/include/mbgl/style/conversion.hpp +++ b/include/mbgl/style/conversion.hpp @@ -251,11 +251,14 @@ private: }, [] (const Storage& s, const char * key) { optional member = Traits::objectMember(reinterpret_cast(s), key); - if (member) return optional(std::move(*member)); - return optional(); + if (member) { + return optional(Convertible(std::move(*member))); + } else { + return optional(); + } }, [] (const Storage& s, const std::function (const std::string&, const Convertible&)>& fn) { - return Traits::eachMember(reinterpret_cast(s), [&](const std::string& k, const T&& v) { + return Traits::eachMember(reinterpret_cast(s), [&](const std::string& k, T&& v) { return fn(k, Convertible(std::move(v))); }); }, diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp index fbf5e2cd62..510a9f8444 100644 --- a/platform/android/src/style/android_conversion.hpp +++ b/platform/android/src/style/android_conversion.hpp @@ -111,8 +111,8 @@ public: }; template -optional convert(const mbgl::android::Value& value, Error& error, Args&&...args) { - return convert(Convertible(value), error, std::forward(args)...); +optional convert(mbgl::android::Value&& value, Error& error, Args&&...args) { + return convert(Convertible(std::move(value)), error, std::forward(args)...); } } // namespace conversion diff --git a/platform/android/src/style/conversion/filter.hpp b/platform/android/src/style/conversion/filter.hpp index 1f0abcf3a4..c154e88e7c 100644 --- a/platform/android/src/style/conversion/filter.hpp +++ b/platform/android/src/style/conversion/filter.hpp @@ -16,9 +16,8 @@ namespace conversion { inline optional toFilter(jni::JNIEnv& env, jni::Array> jfilter) { mbgl::optional filter; if (jfilter) { - Value filterValue(env, jfilter); mbgl::style::conversion::Error error; - auto converted = mbgl::style::conversion::convert(filterValue, error); + auto converted = mbgl::style::conversion::convert(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/url_or_tileset.hpp b/platform/android/src/style/conversion/url_or_tileset.hpp index f2ebce7bd1..92c1182a63 100644 --- a/platform/android/src/style/conversion/url_or_tileset.hpp +++ b/platform/android/src/style/conversion/url_or_tileset.hpp @@ -17,10 +17,10 @@ namespace android { // This conversion is expected not to fail because it's used only in contexts where // the value was originally a String or TileSet object on the Java side. If it fails // to convert, it's a bug in our serialization or Java-side static typing. -inline variant convertURLOrTileset(const mbgl::android::Value& value) { +inline variant convertURLOrTileset(mbgl::android::Value&& value) { using namespace mbgl::style::conversion; - const Convertible convertible(value); + const Convertible convertible(std::move(value)); if (isObject(convertible)) { Error error; optional tileset = convert(convertible, error); diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index 54d896ec7c..31032b117f 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -87,10 +87,8 @@ namespace android { } void Layer::setLayoutProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) { - Value value(env, jvalue); - // Convert and set property - optional error = mbgl::style::conversion::setLayoutProperty(layer, jni::Make(env, jname), value); + optional error = mbgl::style::conversion::setLayoutProperty(layer, jni::Make(env, jname), Value(env, jvalue)); if (error) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make(env, jname) + " " + error->message); return; @@ -98,10 +96,8 @@ namespace android { } void Layer::setPaintProperty(jni::JNIEnv& env, jni::String jname, jni::Object<> jvalue) { - Value value(env, jvalue); - // Convert and set property - optional error = mbgl::style::conversion::setPaintProperty(layer, jni::Make(env, jname), value); + optional error = mbgl::style::conversion::setPaintProperty(layer, jni::Make(env, jname), Value(env, jvalue)); if (error) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting property: " + jni::Make(env, jname) + " " + error->message); return; @@ -125,10 +121,8 @@ namespace android { using namespace mbgl::style; using namespace mbgl::style::conversion; - Value wrapped(env, jfilter); - Error error; - optional converted = convert(wrapped, error); + optional converted = convert(Value(env, jfilter), error); if (!converted) { mbgl::Log::Error(mbgl::Event::JNI, "Error setting filter: " + error.message); return; diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index e1cd81d7fd..70bdea6677 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -24,8 +24,6 @@ namespace android { Value::Value(jni::JNIEnv& _env, jni::jobject* _value) : env(_env), value(_value, ObjectDeleter(env)) {} - Value::~Value() = default; - bool Value::isNull() const { return value == nullptr; } diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp index 7464bae832..2057b93454 100644 --- a/platform/android/src/style/value.hpp +++ b/platform/android/src/style/value.hpp @@ -9,9 +9,13 @@ namespace android { class Value { public: - Value(jni::JNIEnv&, jni::jobject*); - virtual ~Value(); + + Value(Value&&) = default; + Value& operator=(Value&&) = default; + + Value(const Value&) = delete; + Value& operator=(const Value&) = delete; bool isNull() const; bool isArray() const; -- cgit v1.2.1