Index: libadblockplus-android/jni/Utils.cpp |
diff --git a/libadblockplus-android/jni/Utils.cpp b/libadblockplus-android/jni/Utils.cpp |
index 282ae5b344ea6640f6a6de8c3daf89e6b8f87f13..02a2bade2e9fbadb7d1127b2441941c8cab6fb7c 100644 |
--- a/libadblockplus-android/jni/Utils.cpp |
+++ b/libadblockplus-android/jni/Utils.cpp |
@@ -164,37 +164,25 @@ JNIEnvAcquire::~JNIEnvAcquire() |
} |
template<typename T> |
-static jobject NewJniObject(JNIEnv* env, const T& value, jclass clazz, jmethodID ctor) |
+static jobject NewJniObject(JNIEnv* env, T&& value, jclass clazz, jmethodID ctor) |
{ |
- if (!value.get()) |
- { |
- return 0; |
- } |
- |
- return env->NewObject(clazz, ctor, JniPtrToLong(new T(value))); |
-} |
- |
-template<typename T> |
-static jobject NewJniObject(JNIEnv* env, const T& value, const char* javaClass) |
-{ |
- JniLocalReference<jclass> clazz( env, env->FindClass(javaClass)); |
- jmethodID ctor = env->GetMethodID(*clazz, "<init>", "(J)V"); |
- return NewJniObject(env, value, *clazz, ctor); |
+ return env->NewObject(clazz, ctor, JniPtrToLong(new T(std::forward<T>(value)))); |
} |
-jobject NewJniFilter(JNIEnv* env, const AdblockPlus::FilterPtr& filter) |
+jobject NewJniFilter(JNIEnv* env, AdblockPlus::Filter&& filter) |
{ |
- return NewJniObject(env, filter, filterClass->Get(), filterCtor); |
+ return NewJniObject<AdblockPlus::Filter>( |
+ env, std::move(filter), filterClass->Get(), filterCtor); |
} |
-jobject NewJniSubscription(JNIEnv* env, |
- const AdblockPlus::SubscriptionPtr& subscription) |
+jobject NewJniSubscription(JNIEnv* env, AdblockPlus::Subscription&& subscription) |
{ |
- return NewJniObject(env, subscription, subscriptionClass->Get(), subscriptionCtor); |
+ return NewJniObject<AdblockPlus::Subscription>( |
+ env, std::move(subscription), subscriptionClass->Get(), subscriptionCtor); |
} |
-jobject NewJniNotification(JNIEnv* env, |
- const AdblockPlus::NotificationPtr& notification) |
+jobject NewJniNotification(JNIEnv* env, AdblockPlus::Notification&& notification) |
{ |
- return NewJniObject(env, notification, notificationClass->Get(), notificationCtor); |
+ return NewJniObject<AdblockPlus::Notification>( |
+ env, std::move(notification), notificationClass->Get(), notificationCtor); |
} |