From a2bf48f6b55ef0f0f32ec26f224f674f02cd02cf Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 4 Jan 2018 14:04:16 +0100 Subject: [PATCH] Do not use Java's nativePtr for Factory --- wrappers/java/genwrapper.py | 1 + wrappers/java/java_class.mustache | 2 +- wrappers/java/jni.mustache | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/wrappers/java/genwrapper.py b/wrappers/java/genwrapper.py index 597997b2d..4d97f4573 100755 --- a/wrappers/java/genwrapper.py +++ b/wrappers/java/genwrapper.py @@ -366,6 +366,7 @@ class JavaTranslator(object): methodDict['classCName'] = 'Linphone' + className.to_camel_case() methodDict['className'] = className.to_camel_case() methodDict['classImplName'] = className.to_camel_case() + 'Impl' + methodDict['isLinphoneFactory'] = className.to_camel_case() == 'Factory' methodDict['jniPath'] = self.jni_path methodDict['return'] = self.translate_type(_method.returnType, jni=True, isReturn=True) diff --git a/wrappers/java/java_class.mustache b/wrappers/java/java_class.mustache index fa544482b..81a8fd9e6 100644 --- a/wrappers/java/java_class.mustache +++ b/wrappers/java/java_class.mustache @@ -85,7 +85,7 @@ public {{#isLinphoneFactory}}abstract class{{/isLinphoneFactory}}{{#isNotLinphon public static final synchronized Factory instance() { try { if (_Factory == null) { - _Factory = new FactoryImpl(0); + _Factory = new FactoryImpl(0); // This value is not relevant, correct factory pointer will be used in JNI layer } } catch (Exception e) { System.err.println("Cannot instanciate factory"); diff --git a/wrappers/java/jni.mustache b/wrappers/java/jni.mustache index 95ae4fb80..4646964db 100644 --- a/wrappers/java/jni.mustache +++ b/wrappers/java/jni.mustache @@ -426,7 +426,9 @@ jobject Java_{{jni_package}}FactoryImpl_createCore(JNIEnv *env, jobject thiz, jo {{#methods}} {{#notEmpty}} {{return}} {{name}}({{params}}) { - {{#notStatic}}{{classCName}} *cptr = ({{classCName}}*)ptr;{{/notStatic}}{{#strings}} + {{#notStatic}}{{classCName}} *cptr = ({{classCName}}*)ptr; + {{#isLinphoneFactory}}cptr = linphone_factory_get();{{/isLinphoneFactory}} + {{/notStatic}}{{#strings}} const char* c_{{string}} = GetStringUTFChars(env, {{string}}); {{/strings}}{{#bytes}} {{bytesargtype}} c_{{bytesargname}} = ({{bytesargtype}})env->GetByteArrayElements({{bytesargname}}, NULL);