Skip to content

Commit 36e15ad

Browse files
committed
Issue #106: Retain error messages from annotation processors
1 parent 7f7b0f3 commit 36e15ad

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

plexus-compilers/plexus-compiler-javac/src/main/java/org/codehaus/plexus/compiler/javac/JavacCompiler.java

+21
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,10 @@ else if ( hasPointer )
753753
errors.add( new CompilerMessage( buffer.toString(), CompilerMessage.Kind.ERROR ) );
754754
return errors;
755755
}
756+
else if ( line.startsWith( "An annotation processor threw an uncaught exception." ) ) {
757+
CompilerMessage annotationProcessingError = parseAnnotationProcessorStream( input );
758+
errors.add( annotationProcessingError );
759+
}
756760

757761
// new error block?
758762
if ( !line.startsWith( " " ) && hasPointer )
@@ -798,6 +802,23 @@ else if ( ( buffer.length() == 0 ) && isMisc( line ) )
798802
}
799803
}
800804

805+
private static CompilerMessage parseAnnotationProcessorStream( final BufferedReader input )
806+
throws IOException
807+
{
808+
String line = input.readLine();
809+
final StringBuilder buffer = new StringBuilder();
810+
811+
while (line != null) {
812+
if (!line.startsWith( "Consult the following stack trace for details." )) {
813+
buffer.append(line);
814+
buffer.append(EOL);
815+
}
816+
line = input.readLine();
817+
}
818+
819+
return new CompilerMessage( buffer.toString(), CompilerMessage.Kind.ERROR );
820+
}
821+
801822
private static boolean isMisc( String line )
802823
{
803824
return startsWithPrefix( line, MISC_PREFIXES );

plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/JavacCompilerTest.java

+41
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
package org.codehaus.plexus.compiler.javac;
22

3+
import org.codehaus.plexus.compiler.CompilerMessage;
34
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
7+
import java.io.BufferedReader;
8+
import java.io.IOException;
9+
import java.io.StringReader;
10+
import java.util.List;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
413

514
/*
615
* Licensed to the Apache Software Foundation (ASF) under one
@@ -34,4 +43,36 @@ public void setUp()
3443
super.setUp();
3544
setForceJavacCompilerUse( true );
3645
}
46+
47+
@Test
48+
void parseModernStream_withAnnotationProcessingErrors() throws IOException
49+
{
50+
String input =
51+
"\n" +
52+
"\n" +
53+
"An annotation processor threw an uncaught exception.\n" +
54+
"Consult the following stack trace for details.\n" +
55+
"java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x1da51a35) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x1da51a35\n" +
56+
"\tat lombok.javac.apt.LombokProcessor.getJavacProcessingEnvironment(LombokProcessor.java:433)\n" +
57+
"\tat lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:92)\n" +
58+
"\tat lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:160)\n" +
59+
"\tat lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:213)\n" +
60+
"\tat lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:64)\n" +
61+
"\tat jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:702)\n" +
62+
"\tat jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:829)\n" +
63+
"\tat jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:925)\n" +
64+
"\tat jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1269)\n" +
65+
"\tat jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1384)\n" +
66+
"\tat jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1261)\n" +
67+
"\tat jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:935)\n" +
68+
"\tat jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)\n" +
69+
"\tat jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)\n" +
70+
"\tat jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)\n" +
71+
"\tat jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)\n";
72+
73+
List<CompilerMessage> compilerMessages = JavacCompiler.parseModernStream( 1,
74+
new BufferedReader( new StringReader( input ) ) );
75+
76+
assertThat( compilerMessages ).hasSize( 1 );
77+
}
3778
}

0 commit comments

Comments
 (0)