Index: jni/Utils.cpp |
diff --git a/jni/Utils.cpp b/jni/Utils.cpp |
index ad7b5054de7acf72316126c83bcebb24171be229..9845b4d4c1cf5ea3e5449b0ff431143702cf3243 100644 |
--- a/jni/Utils.cpp |
+++ b/jni/Utils.cpp |
@@ -86,3 +86,39 @@ JNIEnvAcquire::~JNIEnvAcquire() |
javaVM->DetachCurrentThread(); |
} |
} |
+ |
+template<typename T> |
+static jobject NewJniObject(JNIEnv* env, const T& value, const char* javaClass) |
+{ |
+ if (!value.get()) |
+ { |
+ return 0; |
+ } |
+ |
+ JniLocalReference<jclass> clazz( |
+ env, |
+ env->FindClass(javaClass)); |
+ jmethodID method = env->GetMethodID(*clazz, "<init>", "(J)V"); |
+ |
+ return env->NewObject( |
+ *clazz, |
+ method, |
+ JniPtrToLong(new T(value))); |
+} |
+ |
+jobject NewJniFilter(JNIEnv* env, const AdblockPlus::FilterPtr& filter) |
+{ |
+ return NewJniObject(env, filter, PKG("Filter")); |
+} |
+ |
+jobject NewJniSubscription(JNIEnv* env, |
+ const AdblockPlus::SubscriptionPtr& subscription) |
+{ |
+ return NewJniObject(env, subscription, PKG("Subscription")); |
+} |
+ |
+jobject NewJniNotification(JNIEnv* env, |
+ const AdblockPlus::NotificationPtr& notification) |
+{ |
+ return NewJniObject(env, notification, PKG("Notification")); |
+} |