Skip to content

Forked javac annotation processing error stack trace not logged for non-English locales #336

Closed
@kriegaex

Description

@kriegaex

I first thought that I am dealing with a problem in Maven Compiler Plugin, so I created MCOMPILER-566 earlier today. Copying the information from there to here:

When analysing MCOMPILER-424, at some point I wanted to know what happens if I set fork=true or forceJavacCompilerUse=true. The result was bad: No matter if I compile with mvn -e -X or verbose=true, I only see a CompilationFailureException: Compilation failure. There seems to be no way to actually see the underlying root cause. I have to compile in process via Plexus JavaxToolsCompiler to see the AnnotationTypeMismatchException from this comment.

It is not helpful to know that compilation failed, but not why.

Intermediate result: I added some debug statements into org.codehaus.plexus.compiler.javac.JavacCompiler::compileOutOfProcess:

returnCode = CommandLineUtils.executeCommandLine(cli, out, out);
System.out.println("### plexus javac return code: " + returnCode);
System.out.println("### plexus javac output:\n" + out.getOutput());
messages = parseModernStream(returnCode, new BufferedReader(new StringReader(out.getOutput())));
System.out.println("### plexus javac messages: " + messages);

The Maven console log when running with the latest Maven Compiler and latest Plexus Compiler (sorry for interspersed German messages due to locale auto detection):

[INFO] Compiling 1 source file with javac [forked debug release 17] to target\classes
### plexus javac return code: 3
### plexus javac output:
Processor ran!
[org.example.MyFirstAnnotation]
[errorRaised=false, rootElements=[org.example.AnnotatedClass], processingOver=false]
Warnung: No SupportedSourceVersion annotation found on org.example.Processor, returning RELEASE_6.
Warnung: Unterst�tzte Quellversion "RELEASE_6" von Annotationsprozessor "org.example.Processor" kleiner als -source "17"
2 Warnungen


Ein Annotationsprozessor hat eine nicht abgefangene Ausnahme ausgel�st.
Details finden Sie im folgenden Stacktrace.
java.lang.annotation.AnnotationTypeMismatchException: Incorrectly typed data found for annotation element public abstract org.example.MySecondAnnotation org.example.MyFirstAnnotation.secondAnnotation() (Found data of type org.example.MySecondAnnotation)
	at jdk.compiler/com.sun.tools.javac.model.AnnotationProxyMaker$ValueVisitor$1AnnotationTypeMismatchExceptionProxy.generateException(AnnotationProxyMaker.java:271)
	at java.base/sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:89)
	at jdk.proxy3/jdk.proxy3.$Proxy3.secondAnnotation(Unknown Source)
	at org.example.Processor.process(Processor.java:23)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1021)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:937)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1265)
	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1380)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1271)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:948)
	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
	at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
	at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)

As you can see, Plexus JavacCompiler gets all the output from javac, but then somehow discards it while parsing it in JavacCompiler::parseModernStream. I have not debugged into that part yet, but it looks like a Plexus Compiler Javac bug.

BTW, this...

Ein Annotationsprozessor hat eine nicht abgefangene Ausnahme ausgelöst.
Details finden Sie im folgenden Stacktrace.

translates to:

An annotation processor threw an uncaught exception.
Consult the following stack trace for details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions