Compile C and Java code to implement this callback

Property definitions

nitc :: java $ NitniCallback :: compile_callback_to_java
	# Compile C and Java code to implement this callback
	fun compile_callback_to_java(mmodule: MModule, mainmodule: MModule, ccu: CCompilationUnit) do end
src/ffi/java.nit:501,2--502,98

nitc :: java $ MExplicitCall :: compile_callback_to_java
	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

		# In C, indirection implementing the Java extern methods
		var csignature = mproperty.build_c_implementation_signature(recv_mtype, mmodule, "___indirect", long_signature, from_java_call_context)
		var cf = new CFunction("JNIEXPORT {csignature}")
		cf.exprs.add "\t{mproperty.build_ccall(recv_mtype, mainmodule, null, long_signature, from_java_call_context, null)}\n"
		ccu.add_non_static_local_function cf

		# In Java, declare the extern method as a private static local method
		var java_signature = mproperty.build_csignature(recv_mtype, mainmodule, null, short_signature, java_call_context)
		mmodule.java_file.class_content.add "private native static {java_signature};\n"
	end
src/ffi/java.nit:514,2--530,4

nitc :: java $ MClassType :: compile_callback_to_java
	redef fun compile_callback_to_java(mmodule, mainmodule, ccu)
	do
		# Don't generate functions for reference counters on extern classes
		if mclass.ftype != null then return

		super
	end
src/ffi/java.nit:739,2--745,4