src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/TranslatedException.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/TranslatedException.java	Sat May  4 16:23:15 2019
--- new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/TranslatedException.java	Sat May  4 16:23:13 2019

*** 47,66 **** --- 47,73 ---- @Override public Throwable fillInStackTrace() { return this; } @Override public String toString() { return getMessage(); + private static Throwable create(String className, String message) { + // Try create with reflection first. + try { + Class<?> cls = Class.forName(className); + if (message == null) { + return (Throwable) cls.getConstructor().newInstance(); + } + cls.getDeclaredConstructor(String.class); + return (Throwable) cls.getConstructor(String.class).newInstance(message); + } catch (Throwable ignore) { } private static TranslatedException create(String className, String message) { if (className.equals(TranslatedException.class.getName())) { // Chop the class name when boxing another TranslatedException return new TranslatedException(message); } + if (message == null) { return new TranslatedException(className); } return new TranslatedException(className + ": " + message); }
*** 145,155 **** --- 152,162 ---- String exceptionClassName = parts[i++]; String exceptionMessage = parts[i++]; Throwable throwable = create(exceptionClassName, exceptionMessage); int stackTraceDepth = Integer.parseInt(parts[i++]); - StackTraceElement[] suffix = parent == null ? new StackTraceElement[0] : getStackTraceSuffix(); StackTraceElement[] stackTrace = new StackTraceElement[stackTraceDepth + suffix.length]; for (int j = 0; j < stackTraceDepth; j++) { String className = parts[i++]; String methodName = parts[i++]; String fileName = parts[i++];

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/TranslatedException.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File