I am using a custom annotation processor and have a new problem. I am using Gradle (3.1.1) and when I add the path of the file that will be generated, by my processor, to the sourceSet I get weird problems.
I perform a gradle clean build
then a gradle build
afterwards and the build get's destroyed.
The stacktrace I get is a pretty common one to my surprise.
An exception has occurred in the compiler (1.8.0_91). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.IllegalStateException: endPosTable already set
at com.sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.java:136)
at com.sun.tools.javac.util.Log.setEndPosTable(Log.java:350)
at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:667)
at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.java:892)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)
at com.sun.tools.javac.Main.main(Main.java:42)
If I always clean before building I don't have a problem, alsothe build is always successfull when I don't add the sourceSet. I even tried deleting the file right before creating the new generated file in my annotation processor but that didn't do the trick either.
While researching I also found this interesting link: JDK Bug report
But thinking about that I either have to always clean first or to leave it out of my sourceSet is not really good. Since Eclipse doesn't like not finding a file that should be there by convention.
Do you have any suggestions on how to solve this?
Since this is an official Bug of JDK 8 which is aimed to be resolved at JDK 9, I implemented a workaround with deleting the file with gradle if it already exists. The processor doesn't have a problem then anymore and I can keep it in my sourceSet.
Greetings :)
EDIT: The workaround itself.
We use gradle so this is a workaround for a gradle script. But basically the workaround means to delete the file that will be generated before starting the compile AND pre-compile steps.