From d7bc10d7ff0e3a30d74c4e4c439230f3983bcfb4 Mon Sep 17 00:00:00 2001 From: Mathieu Féry Date: Thu, 15 Jun 2023 18:03:13 +0200 Subject: feat(jni): Add directive for dedicated JNI Code with CustomJNICode --- src/java/com/jogamp/gluegen/JavaEmitter.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/java/com/jogamp/gluegen/JavaEmitter.java') diff --git a/src/java/com/jogamp/gluegen/JavaEmitter.java b/src/java/com/jogamp/gluegen/JavaEmitter.java index ada1ce9..733f12a 100644 --- a/src/java/com/jogamp/gluegen/JavaEmitter.java +++ b/src/java/com/jogamp/gluegen/JavaEmitter.java @@ -830,7 +830,7 @@ public class JavaEmitter implements GlueEmitter { // Note that machDescJava MachineDataInfo is always 64bit unix, // which complies w/ Java types. - boolean needsNativeCode = false; + boolean needsNativeCode = !cfg.customJNICodeForClass(containingJTypeName).isEmpty(); // Native code for calls through function pointers gets emitted // into the abstract base class; Java code which accesses fields @@ -1162,6 +1162,7 @@ public class JavaEmitter implements GlueEmitter { javaUnit.emitln("}"); javaUnit.close(); if (needsNativeCode) { + emitCustomJNICode(jniUnit, containingJTypeName); jniUnit.close(); } if( GlueGen.debug() ) { @@ -2524,6 +2525,23 @@ public class JavaEmitter implements GlueEmitter { unit.emitln(" // ---- End CustomJavaCode .cfg declarations"); } + /** + * Emit all the strings specified in the "CustomJNICode" parameters of + * the configuration file. + */ + protected void emitCustomJNICode(final CodeUnit unit, final String className) throws Exception { + final List code = cfg.customJNICodeForClass(className); + if (code.isEmpty()) + return; + + unit.emitln(); + unit.emitln(" // --- Begin CustomJNICode .cfg declarations"); + for (final String line : code) { + unit.emitln(line); + } + unit.emitln(" // ---- End CustomJNICode .cfg declarations"); + } + public String[] getClassAccessModifiers(final String classFQName) { String[] accessModifiers; final MethodAccess acc = cfg.accessControl(classFQName); -- cgit v1.2.3