diff options
author | Sven Gothel <[email protected]> | 2014-12-11 19:05:26 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-12-11 19:05:26 +0100 |
commit | 558d51e384e8c4e2bf3d4f646724c3351101b605 (patch) | |
tree | 9530af2389ce4ce0dbb6c09d41b88245d99118e2 | |
parent | 150ea4f231c9629ef9ef354e3f1a92a516d46f91 (diff) |
GlueGen JavaEmitter: Use proper class access modifiers for emitted classes incl. ProcAddressTable
Emitted Java classes as well as optional ProcAddressTable shall
use unique generated access modifiers covering all MethodAccess cases.
-rw-r--r-- | src/java/com/jogamp/gluegen/JavaConfiguration.java | 9 | ||||
-rw-r--r-- | src/java/com/jogamp/gluegen/JavaEmitter.java | 33 | ||||
-rw-r--r-- | src/java/com/jogamp/gluegen/procaddress/ProcAddressEmitter.java | 10 |
3 files changed, 32 insertions, 20 deletions
diff --git a/src/java/com/jogamp/gluegen/JavaConfiguration.java b/src/java/com/jogamp/gluegen/JavaConfiguration.java index 53af4fc..b64c041 100644 --- a/src/java/com/jogamp/gluegen/JavaConfiguration.java +++ b/src/java/com/jogamp/gluegen/JavaConfiguration.java @@ -319,9 +319,12 @@ public class JavaConfiguration { return emissionStyle; } - /** Returns the access control for the emitted Java method. Returns one of JavaEmitter.ACC_PUBLIC, JavaEmitter.ACC_PROTECTED, JavaEmitter.ACC_PRIVATE, or JavaEmitter.ACC_PACKAGE_PRIVATE. */ - public MethodAccess accessControl(final String methodName) { - final MethodAccess ret = accessControl.get(methodName); + /** + * Returns the access control for the given method-name + * or fully qualified class-name. + */ + public MethodAccess accessControl(final String name) { + final MethodAccess ret = accessControl.get(name); if (ret != null) { return ret; } diff --git a/src/java/com/jogamp/gluegen/JavaEmitter.java b/src/java/com/jogamp/gluegen/JavaEmitter.java index f9dd13b..1ec1087 100644 --- a/src/java/com/jogamp/gluegen/JavaEmitter.java +++ b/src/java/com/jogamp/gluegen/JavaEmitter.java @@ -2311,6 +2311,23 @@ public class JavaEmitter implements GlueEmitter { writer.println(" // ---- End CustomJavaCode .cfg declarations"); } + public String[] getClassAccessModifiers(final String classFQName) { + String[] accessModifiers; + final MethodAccess acc = cfg.accessControl(classFQName); + if( PUBLIC_ABSTRACT == acc ) { + accessModifiers = new String[] { PUBLIC.getJavaName(), PUBLIC_ABSTRACT.getJavaName() }; + } else if( PACKAGE_PRIVATE == acc ) { + accessModifiers = new String[] { PACKAGE_PRIVATE.getJavaName() }; + } else if( PRIVATE == acc ) { + throw new IllegalArgumentException("Class access "+classFQName+" cannot be private"); + } else if( PROTECTED == acc ) { + accessModifiers = new String[] { PROTECTED.getJavaName() }; + } else { // default PUBLIC + accessModifiers = new String[] { PUBLIC.getJavaName() }; + } + return accessModifiers; + } + /** * Write out any header information for the output files (class declaration * and opening brace, import statements, etc). @@ -2346,13 +2363,7 @@ public class JavaEmitter implements GlueEmitter { } }; - String[] accessModifiers = null; - if(cfg.accessControl(cfg.className()) == PUBLIC_ABSTRACT) { - accessModifiers = new String[] { "public", "abstract" }; - } else { - accessModifiers = new String[] { "public" }; - } - + final String[] accessModifiers = getClassAccessModifiers(cfg.className()); CodeGenUtils.emitJavaHeaders( javaWriter, cfg.packageName(), @@ -2390,13 +2401,7 @@ public class JavaEmitter implements GlueEmitter { interfaces[userSpecifiedInterfaces.size()] = cfg.className(); } - String[] accessModifiers = null; - if(cfg.accessControl(cfg.implClassName()) == PUBLIC_ABSTRACT) { - accessModifiers = new String[] { "public", "abstract" }; - } else { - accessModifiers = new String[] { "public" }; - } - + final String[] accessModifiers = getClassAccessModifiers(cfg.implClassName()); CodeGenUtils.emitJavaHeaders( javaImplWriter, cfg.implPackageName(), diff --git a/src/java/com/jogamp/gluegen/procaddress/ProcAddressEmitter.java b/src/java/com/jogamp/gluegen/procaddress/ProcAddressEmitter.java index a0adbd0..4145cc4 100644 --- a/src/java/com/jogamp/gluegen/procaddress/ProcAddressEmitter.java +++ b/src/java/com/jogamp/gluegen/procaddress/ProcAddressEmitter.java @@ -307,8 +307,8 @@ public class ProcAddressEmitter extends JavaEmitter { if (implPackageName == null) { implPackageName = getImplPackageName(); } - final String fullTableClassName = implPackageName + "." + tableClassName; - final MethodAccess tableClassAccess = cfg.accessControl(fullTableClassName); + final String tableClassFQN = implPackageName + "." + tableClassName; + final String[] accessModifiers = getClassAccessModifiers(tableClassFQN); final String jImplRoot = getJavaOutputDir() + File.separator + CodeGenUtils.packageAsPath(implPackageName); @@ -330,7 +330,11 @@ public class ProcAddressEmitter extends JavaEmitter { tableWriter.println(" * This table is a cache of pointers to the dynamically-linkable C library."); tableWriter.println(" * @see " + ProcAddressTable.class.getSimpleName()); tableWriter.println(" */"); - tableWriter.println(tableClassAccess.getJavaName() + " final class " + tableClassName + " extends "+ ProcAddressTable.class.getSimpleName() + " {"); + for (int i = 0; accessModifiers != null && i < accessModifiers.length; ++i) { + tableWriter.print(accessModifiers[i]); + tableWriter.print(' '); + } + tableWriter.println("final class " + tableClassName + " extends "+ ProcAddressTable.class.getSimpleName() + " {"); tableWriter.println(); for (final String string : getProcAddressConfig().getForceProcAddressGen()) { |