summaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen/structgen/CStruct.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2014-05-11 03:03:36 +0200
committerSven Gothel <[email protected]>2014-05-11 03:03:36 +0200
commit1e53a38eb06aa8ff50660fdf7bd8570b27f27c56 (patch)
treef061dfb77af5b4c1f27da78b4dbd1881b400abc3 /src/java/com/jogamp/gluegen/structgen/CStruct.java
parent598da96b3d2ffc3e0915f73749cbafa5fa5cea90 (diff)
Bug 923: Remove dependency of CStruct annotation processor _generation_ and generated_class_user due to Java8 issues.
Java8's annotation processor as embedded within javac does not allow referencing not-yet existing generated classes in a class source code which will produce these generated classes via the annotation process. Example: +++ import com.jogamp.gluegen.structgen.CStruct; public class Lala { @CStruct(name="RenderingConfig", header="TestStruct01.h") public RenderingConfig config; } +++ Above example illustrates that the type 'RenderingConfig' does not exist at time of processing the annotation. The type will be created via the annotation process itself. Even though we pass '-proc:only', i.e. skip java compilation, Java8's annotation processing via javac fails in such case. We see this as a bug within javac's annotation processing itself! +++ This workaround splits the annotation process and using the class as generated by the former. To allow this to work, CStruct receives a new field 'jname' allowing to enforce the java-name of the structure using a dummy field type like boolean. @CStruct(name="RenderingConfig", jname="RenderingConfig", header="TestStruct01.h") public boolean dummy; Further more CStruct can be annotated on the package, i.e. 'package-info.java', avoiding the dependency problem altogether. To support multiple header files and types, 'CStructs' has been introduced using an array of 'CStruct'. @CStructs({@CStruct(name="RenderingConfig", header="TestStruct01.h"), @CStruct(name="Pixel", header="TestStruct02.h")}) package com.jogamp.gluegen.test.junit.structgen; Tests: - Build w/ Java7 and Java8 - Validated 'major version 50' (Java 6) class files (OK)
Diffstat (limited to 'src/java/com/jogamp/gluegen/structgen/CStruct.java')
-rw-r--r--src/java/com/jogamp/gluegen/structgen/CStruct.java19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/java/com/jogamp/gluegen/structgen/CStruct.java b/src/java/com/jogamp/gluegen/structgen/CStruct.java
index 9d57196..be72cd8 100644
--- a/src/java/com/jogamp/gluegen/structgen/CStruct.java
+++ b/src/java/com/jogamp/gluegen/structgen/CStruct.java
@@ -33,21 +33,32 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- *
- * @author Michael Bien
- * @author Sven Gothel, et.al.
+ * @author Michael Bien, et al.
*/
-@Target(value = {ElementType.FIELD, ElementType.LOCAL_VARIABLE})
+@Target(value = {ElementType.TYPE, ElementType.PACKAGE, ElementType.FIELD, ElementType.LOCAL_VARIABLE})
@Retention(value = RetentionPolicy.SOURCE)
public @interface CStruct {
/**
* Relative path to the header file.
+ * <p>
+ * Mandatory.
+ * </p>
*/
String header();
/**
* The name of the struct.
+ * <p>
+ * Mandatory for {@link ElementType.TYPE} and {@link ElementType.PACKAGE} annotations
+ * otherwise optional.
+ * </p>
*/
String name() default "_default_";
+
+ /**
+ * The optional java name of the struct.
+ */
+ String jname() default "_default_";
+
}