From 2ef077ca1a45087b2a8507d54ef427d135154e62 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Tue, 4 Nov 2014 16:41:15 -0500 Subject: [PATCH] nitg/ffi: fix Java FFI support in nitg-g MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- src/ffi/java.nit | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ffi/java.nit b/src/ffi/java.nit index 49a880b..f78dc37 100644 --- a/src/ffi/java.nit +++ b/src/ffi/java.nit @@ -155,6 +155,8 @@ class JavaLanguage {{{block.code}}} } """ + + mmodule.callbacks_used_from_java.join m.foreign_callbacks end redef fun compile_extern_class(block, m, ccu, mmodule) do end @@ -170,7 +172,7 @@ class JavaLanguage mmodule.insert_compiler_options # Enable linking C callbacks to java native methods - mmodule.ensure_linking_callback_methods(ffi_ccu.as(not null), mmodule.ffi_callbacks[self]) + mmodule.ensure_linking_callback_methods(ffi_ccu.as(not null)) # Java implementation code var java_file = mmodule.java_file @@ -189,6 +191,7 @@ class JavaLanguage end redef class MModule + private var callbacks_used_from_java = new ForeignCallbackSet # Pure java class source file private var java_file: nullable JavaClassTemplate = null @@ -203,8 +206,9 @@ redef class MModule end # Compile C code to call JNI and link C callbacks implementations to Java extern methods - private fun ensure_linking_callback_methods(ccu: CCompilationUnit, callbacks: Set[NitniCallback]) + private fun ensure_linking_callback_methods(ccu: CCompilationUnit) do + var callbacks = callbacks_used_from_java.callbacks if callbacks.is_empty then ccu.body_decl.add "static int nit_ffi_with_java_registered_natives = 1;\n" return @@ -413,6 +417,8 @@ end redef class MExplicitCall redef fun compile_callback_to_java(mmodule, mainmodule, ccu) do + if not mmodule.callbacks_used_from_java.callbacks.has(self) then return + var mproperty = mproperty assert mproperty isa MMethod -- 1.7.9.5