From d03f7bf81820f7dd7c38a1b5c9d4ef17bbcd7601 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 15 Oct 2024 22:27:32 +0200 Subject: [PATCH] use fail-safe rendering for Diagnostic objects (IDEA-360273) GitOrigin-RevId: 66df25cae0d59e3cb57cf228f642cc76b922e5ec --- .../src/org/jetbrains/jps/javac/APIWrappers.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jps/jps-builders-6/src/org/jetbrains/jps/javac/APIWrappers.java b/jps/jps-builders-6/src/org/jetbrains/jps/javac/APIWrappers.java index fbedce8da39b..887a465fbf43 100644 --- a/jps/jps-builders-6/src/org/jetbrains/jps/javac/APIWrappers.java +++ b/jps/jps-builders-6/src/org/jetbrains/jps/javac/APIWrappers.java @@ -172,7 +172,21 @@ public final class APIWrappers { } public String getMessage(Locale locale) { - return myProcContext.adjustMessage(getWrapperDelegate().getMessage(locale)); + try { + try { + return myProcContext.adjustMessage(getWrapperDelegate().getMessage(locale)); + } + catch (Throwable e) { + // Diagnostic.getMessage() can cause unexpected exceptions while building the message based on a structured data contained in the disgnostic object + // For example, it may fail with a class name resolution error, if some symbols required to build a message are not resolvable at the moment + // Sometimes just repeating a call helps to get the actual diagnostic message + return myProcContext.adjustMessage(getWrapperDelegate().getMessage(locale)); + } + } + catch (Throwable e) { + // fallback logic + return "Unexpected error: " + e.getClass() + ": " + e.getMessage(); + } } }