From 036cd8a5d81c71276726f8e4a928ebd568a22860 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 10 Oct 2017 13:22:14 +0200 Subject: [PATCH] Always use objects in Java wrapper, JNI will take care of handling pointers --- wrappers/java/genwrapper.py | 4 +--- wrappers/java/jni.mustache | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/wrappers/java/genwrapper.py b/wrappers/java/genwrapper.py index 73ea44653..5614d5a01 100644 --- a/wrappers/java/genwrapper.py +++ b/wrappers/java/genwrapper.py @@ -191,9 +191,7 @@ class JavaTranslator(object): methodDict['params'] += self.translate_argument(arg) methodDict['native_params'] += self.translate_argument(arg, True) methodDict['static_native_params'] += self.translate_argument(arg, True) - if type(arg.type) is AbsApi.ClassType: - methodDict['native_params_impl'] += '((' + self.translate_type(arg.type) + 'Impl)' + self.translate_argument_name(arg.name) + ').nativePtr' - elif type(arg.type) is AbsApi.ListType: + if type(arg.type) is AbsApi.ListType: if type(arg.type.containedTypeDesc) is AbsApi.ClassType: methodDict['convertInputClassArrayToLongArray'] = True methodDict['native_params_impl_list_param_name'] = self.translate_argument_name(arg.name) diff --git a/wrappers/java/jni.mustache b/wrappers/java/jni.mustache index 7c5b17133..7427e5b78 100644 --- a/wrappers/java/jni.mustache +++ b/wrappers/java/jni.mustache @@ -35,4 +35,18 @@ static const char* GetStringUTFChars(JNIEnv* env, jstring string) { static void ReleaseStringUTFChars(JNIEnv* env, jstring string, const char *cstring) { if (string) env->ReleaseStringUTFChars(string, cstring); +} + +static jlong GetObjectNativePtr(JNIEnv *env, jobject object) { + jclass objClass = env->GetObjectClass(object); + jfieldID nativePtrId = env->GetFieldID(objClass, "nativePtr", "J"); + jlong nativePtr = env->GetLongField(object, nativePtrId); + return nativePtr; +} + +static jlong SetObjectNativePtr(JNIEnv *env, jobject object, jlong ptr) { + jclass objClass = env->GetObjectClass(object); + jfieldID nativePtrId = env->GetFieldID(objClass, "nativePtr", "J"); + env->SetLongField(object, nativePtrId, ptr); + return ptr; } \ No newline at end of file