Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e33cf61

Browse files
kriegaexslachiewicz
authored andcommitted
Recognise javac.msg.resource error header
"The system is out of resources. Consult the following stack trace for details."
1 parent c307c36 commit e33cf61

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,18 @@ protected static class Messages {
175175
"编译器 ({0}) 中出现异常错误。如果在 Bug Database (https://bugs.java.com) 中没有找到有关该错误的 Java 编译器 Bug,请通过 Java Bug 报告页 (https://bugreport.java.com) 提交 Java 编译器 Bug。请在报告中附上您的程序、以下诊断信息以及传递到 Java 编译器的参数。谢谢。\n",
176176
"Im Compiler ({0}) ist eine Ausnahme aufgetreten. Erstellen Sie auf der Java-Seite zum Melden von Bugs (https://bugreport.java.com) einen Bugbericht, nachdem Sie die Bugdatenbank (https://bugs.java.com) auf Duplikate geprüft haben. Geben Sie in Ihrem Bericht Ihr Programm, die folgende Diagnose und die Parameter an, die Sie dem Java-Compiler übergeben haben. Vielen Dank.\n"
177177
};
178+
179+
// javac.properties-> javac.msg.resource
180+
// (en JDK-8, ja JDK-8, zh_CN JDK-8, en JDK-21, ja JDK-21, zh_CN JDK-21, de JDK-21)
181+
protected static final String[] SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS = {
182+
"\n\nThe system is out of resources.\nConsult the following stack trace for details.\n",
183+
"\n\nシステム・リソースが不足しています。\n詳細は次のスタック・トレースで調査してください。\n",
184+
"\n\n系统资源不足。\n有关详细信息, 请参阅以下堆栈跟踪。\n",
185+
"\n\nThe system is out of resources.\nConsult the following stack trace for details.\n",
186+
"\n\nシステム・リソースが不足しています。\n詳細は次のスタックトレースで調査してください。\n",
187+
"\n\n系统资源不足。\n有关详细信息, 请参阅以下堆栈跟踪。\n",
188+
"\n\nDas System hat keine Ressourcen mehr.\nDetails finden Sie im folgenden Stacktrace.\n"
189+
};
178190
}
179191

180192
private static final Object LOCK = new Object();
@@ -742,7 +754,8 @@ static List<CompilerMessage> parseModernStream(int exitCode, BufferedReader inpu
742754
|| (cleanedUpMessage = getBootLayerInitError(bufferContent)) != null
743755
|| (cleanedUpMessage = getVMInitError(bufferContent)) != null
744756
|| (cleanedUpMessage = getFileABugError(bufferContent)) != null
745-
|| (cleanedUpMessage = getAnnotationProcessingError(bufferContent)) != null) {
757+
|| (cleanedUpMessage = getAnnotationProcessingError(bufferContent)) != null
758+
|| (cleanedUpMessage = getSystemOutOfResourcesError(bufferContent)) != null) {
746759
errors.add(new CompilerMessage(cleanedUpMessage, ERROR));
747760
} else if (hasPointer) {
748761
// A compiler message remains in buffer at end of parse stream
@@ -803,6 +816,10 @@ private static String getAnnotationProcessingError(String message) {
803816
return getTextStartingWithPrefix(message, ANNOTATION_PROCESSING_ERROR_HEADERS);
804817
}
805818

819+
private static String getSystemOutOfResourcesError(String message) {
820+
return getTextStartingWithPrefix(message, SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS);
821+
}
822+
806823
private static boolean startsWithPrefix(String text, String[] prefixes) {
807824
for (String prefix : prefixes) {
808825
if (text.startsWith(prefix)) {

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

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -808,7 +808,10 @@ private static Stream<Arguments> testStackTraceWithUnknownHeader_args() {
808808
FILE_A_BUG_ERROR_HEADERS[0].replaceAll("\\{0\\}", "21").replaceAll("bug", "beetle")),
809809
Arguments.of(
810810
"modified annotation processor error header",
811-
ANNOTATION_PROCESSING_ERROR_HEADERS[0].replaceAll("uncaught", "undandled")));
811+
ANNOTATION_PROCESSING_ERROR_HEADERS[0].replaceAll("uncaught", "undandled")),
812+
Arguments.of(
813+
"modified out of resources error header",
814+
SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[0].replaceAll("resources", "memory")));
812815
}
813816

814817
@ParameterizedTest(name = "{0}")
@@ -876,6 +879,56 @@ private static Stream<Arguments> testBugParade_args() {
876879
Arguments.of("JDK 21 German", FILE_A_BUG_ERROR_HEADERS[9].replaceFirst("\\{0\\}", "21")));
877880
}
878881

882+
@ParameterizedTest(name = "{0}")
883+
@MethodSource("testSystemOutOfResourcesError_args")
884+
public void testSystemOutOfResourcesError(String jdkAndLocale, String stackTraceHeader) throws Exception {
885+
String stackTraceWithHeader = UNIDENTIFIED_LOG_LINES + stackTraceHeader + stackTraceSystemOutOfResourcesError;
886+
887+
List<CompilerMessage> compilerMessages =
888+
JavacCompiler.parseModernStream(4, new BufferedReader(new StringReader(stackTraceWithHeader)));
889+
890+
assertThat(compilerMessages, notNullValue());
891+
assertThat(compilerMessages, hasSize(1));
892+
893+
String message = compilerMessages.get(0).getMessage().replaceAll(EOL, "\n");
894+
// Parser retains stack trace header
895+
assertThat(message, startsWith(stackTraceHeader));
896+
assertThat(message, endsWith(stackTraceSystemOutOfResourcesError));
897+
}
898+
899+
private static final String stackTraceSystemOutOfResourcesError =
900+
"java.lang.OutOfMemoryError: GC overhead limit exceeded\n"
901+
+ "\tat com.sun.tools.javac.util.List.of(List.java:135)\n"
902+
+ "\tat com.sun.tools.javac.util.ListBuffer.append(ListBuffer.java:129)\n"
903+
+ "\tat com.sun.tools.javac.parser.JavacParser.variableDeclaratorsRest(JavacParser.java:3006)\n"
904+
+ "\tat com.sun.tools.javac.parser.JavacParser.classOrInterfaceBodyDeclaration(JavacParser.java:3537)\n"
905+
+ "\tat com.sun.tools.javac.parser.JavacParser.classOrInterfaceBody(JavacParser.java:3436)\n"
906+
+ "\tat com.sun.tools.javac.parser.JavacParser.classDeclaration(JavacParser.java:3285)\n"
907+
+ "\tat com.sun.tools.javac.parser.JavacParser.classOrInterfaceOrEnumDeclaration(JavacParser.java:3226)\n"
908+
+ "\tat com.sun.tools.javac.parser.JavacParser.typeDeclaration(JavacParser.java:3215)\n"
909+
+ "\tat com.sun.tools.javac.parser.JavacParser.parseCompilationUnit(JavacParser.java:3155)\n"
910+
+ "\tat com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:628)\n"
911+
+ "\tat com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:665)\n"
912+
+ "\tat com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)\n"
913+
+ "\tat com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)\n"
914+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:523)\n"
915+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:381)\n"
916+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:370)\n"
917+
+ "\tat com.sun.tools.javac.main.Main.compile(Main.java:361)\n"
918+
+ "\tat com.sun.tools.javac.Main.compile(Main.java:56)\n"
919+
+ "\tat com.sun.tools.javac.Main.main(Main.java:42)\n";
920+
921+
private static Stream<Arguments> testSystemOutOfResourcesError_args() {
922+
return Stream.of(
923+
Arguments.of("JDK 8 English", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[0]),
924+
Arguments.of("JDK 8 Japanese", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[1]),
925+
Arguments.of("JDK 8 Chinese", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[2]),
926+
Arguments.of("JDK 21 English", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[3]),
927+
Arguments.of("JDK 21 Japanese", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[4]),
928+
Arguments.of("JDK 21 Chinese", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[5]),
929+
Arguments.of("JDK 21 German", SYSTEM_OUT_OF_RESOURCES_ERROR_HEADERS[6]));
930+
}
931+
879932
@Test
880933
public void testNonAnchoredWarning() throws IOException {
881934
final String error = "warning: [options] bootstrap class path not set in conjunction with -source 1.6" + EOL

0 commit comments

Comments
 (0)