Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2305357

Browse files
kriegaexslachiewicz
authored andcommittedDec 25, 2024
Recognise javac.msg.plugin.uncaught.exception error header
"A plugin threw an uncaught exception. Consult the following stack trace for details."
1 parent 39263c0 commit 2305357

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed
 

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,17 @@ protected static class Messages {
200200
"\n\nEin Eingabe-/Ausgabefehler ist aufgetreten.\nDetails finden Sie im folgenden Stacktrace.\n"
201201
};
202202

203+
// javac.properties-> javac.msg.plugin.uncaught.exception
204+
// (en JDK-8, ja JDK-8, zh_CN JDK-8, en JDK-21, ja JDK-21, zh_CN JDK-21, de JDK-21)
205+
protected static final String[] PLUGIN_ERROR_HEADERS = {
206+
"\n\nA plugin threw an uncaught exception.\nConsult the following stack trace for details.\n",
207+
"\n\nプラグインで捕捉されない例外がスローされました。\n詳細は次のスタック・トレースで調査してください。\n",
208+
"\n\n插件抛出未捕获的异常错误。\n有关详细信息, 请参阅以下堆栈跟踪。\n",
209+
"\n\nA plugin threw an uncaught exception.\nConsult the following stack trace for details.\n",
210+
"\n\nプラグインで捕捉されない例外がスローされました。\n詳細は次のスタック・トレースで調査してください。\n",
211+
"\n\n插件抛出未捕获的异常错误。\n有关详细信息, 请参阅以下堆栈跟踪。\n",
212+
"\n\nEin Plug-in hat eine nicht abgefangene Ausnahme ausgel\u00F6st.\nDetails finden Sie im folgenden Stacktrace.\n"
213+
};
203214
}
204215

205216
private static final Object LOCK = new Object();
@@ -769,7 +780,8 @@ static List<CompilerMessage> parseModernStream(int exitCode, BufferedReader inpu
769780
|| (cleanedUpMessage = getFileABugError(bufferContent)) != null
770781
|| (cleanedUpMessage = getAnnotationProcessingError(bufferContent)) != null
771782
|| (cleanedUpMessage = getSystemOutOfResourcesError(bufferContent)) != null
772-
|| (cleanedUpMessage = getIOError(bufferContent)) != null) {
783+
|| (cleanedUpMessage = getIOError(bufferContent)) != null
784+
|| (cleanedUpMessage = getPluginError(bufferContent)) != null) {
773785
errors.add(new CompilerMessage(cleanedUpMessage, ERROR));
774786
} else if (hasPointer) {
775787
// A compiler message remains in buffer at end of parse stream
@@ -838,6 +850,10 @@ private static String getIOError(String message) {
838850
return getTextStartingWithPrefix(message, IO_ERROR_HEADERS);
839851
}
840852

853+
private static String getPluginError(String message) {
854+
return getTextStartingWithPrefix(message, PLUGIN_ERROR_HEADERS);
855+
}
856+
841857
private static boolean startsWithPrefix(String text, String[] prefixes) {
842858
for (String prefix : prefixes) {
843859
if (text.startsWith(prefix)) {

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

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,9 @@ private static Stream<Arguments> testStackTraceWithUnknownHeader_args() {
812812
Arguments.of(
813813
"modified out of resources error header",
814814
SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[0].replaceAll("resources", "memory")),
815-
Arguments.of("modified I/O error header", IO_ERROR_HEADERS[0].replaceAll("input/output", "I/O")));
815+
Arguments.of("modified I/O error header", IO_ERROR_HEADERS[0].replaceAll("input/output", "I/O")),
816+
Arguments.of(
817+
"modified plugin error header", PLUGIN_ERROR_HEADERS[0].replaceAll("uncaught", "unhandled")));
816818
}
817819

818820
@ParameterizedTest(name = "{0}")
@@ -977,6 +979,46 @@ private static Stream<Arguments> testIOError_args() {
977979
Arguments.of("JDK 21 German", IO_ERROR_HEADERS[6]));
978980
}
979981

982+
@ParameterizedTest(name = "{0}")
983+
@MethodSource("testPluginError_args")
984+
public void testPluginError(String jdkAndLocale, String stackTraceHeader) throws Exception {
985+
String stackTraceWithHeader = UNIDENTIFIED_LOG_LINES + stackTraceHeader + stackTracePluginError;
986+
987+
List<CompilerMessage> compilerMessages =
988+
JavacCompiler.parseModernStream(4, new BufferedReader(new StringReader(stackTraceWithHeader)));
989+
990+
assertThat(compilerMessages, notNullValue());
991+
assertThat(compilerMessages, hasSize(1));
992+
993+
String message = compilerMessages.get(0).getMessage().replaceAll(EOL, "\n");
994+
// Parser retains stack trace header
995+
assertThat(message, startsWith(stackTraceHeader));
996+
assertThat(message, endsWith(stackTracePluginError));
997+
}
998+
999+
private static final String stackTracePluginError =
1000+
"A plugin threw an uncaught exception.\n" + "Consult the following stack trace for details.\n"
1001+
+ "java.lang.NoSuchMethodError: com.sun.tools.javac.util.JavacMessages.add(Lcom/sun/tools/javac/util/JavacMessages$ResourceBundleHelper;)V\n"
1002+
+ "\tat com.google.errorprone.BaseErrorProneJavaCompiler.setupMessageBundle(BaseErrorProneJavaCompiler.java:202)\n"
1003+
+ "\tat com.google.errorprone.ErrorProneJavacPlugin.init(ErrorProneJavacPlugin.java:40)\n"
1004+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:470)\n"
1005+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:381)\n"
1006+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:370)\n"
1007+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:361)\n"
1008+
+ "\tat com.sun.tools.javac.Main.compile(Main.java:56)\n"
1009+
+ "\tat com.sun.tools.javac.Main.main(Main.java:42)\n";
1010+
1011+
private static Stream<Arguments> testPluginError_args() {
1012+
return Stream.of(
1013+
Arguments.of("JDK 8 English", PLUGIN_ERROR_HEADERS[0]),
1014+
Arguments.of("JDK 8 Japanese", PLUGIN_ERROR_HEADERS[1]),
1015+
Arguments.of("JDK 8 Chinese", PLUGIN_ERROR_HEADERS[2]),
1016+
Arguments.of("JDK 21 English", PLUGIN_ERROR_HEADERS[3]),
1017+
Arguments.of("JDK 21 Japanese", PLUGIN_ERROR_HEADERS[4]),
1018+
Arguments.of("JDK 21 Chinese", PLUGIN_ERROR_HEADERS[5]),
1019+
Arguments.of("JDK 21 German", PLUGIN_ERROR_HEADERS[6]));
1020+
}
1021+
9801022
@Test
9811023
public void testNonAnchoredWarning() throws IOException {
9821024
final String error = "warning: [options] bootstrap class path not set in conjunction with -source 1.6" + EOL

0 commit comments

Comments
 (0)
Please sign in to comment.