this.thrown = thrown;
}
+ // TODO: Is it really necessary to re-invent stack trace printing here? Can these methods simply go away?
+ // The only doubtful "benefit" is that the causing exception's stack trace is printed fully instead of shortened.
+ // But OTOH, the JVM just omits the lines which were present in the original stack trace above already, so there is
+ // really no extra information here.
+
public void printStackTrace() {
printStackTrace(System.err);
}
super.printStackTrace(s);
if (null != thrown) {
s.print("Caused by: ");
- s.print(thrown.getClass().getName());
- String message = thrown.getMessage();
- if (null != message) {
- s.print(": ");
- s.print(message);
- }
- s.println();
thrown.printStackTrace(s);
}
+ // Flush PrintWriter in case the JVM exits before the stack trace was printed. Otherwise, when e.g. calling
+ // UnresolvedType.signatureToName from a main method or a test directly and a BCException is thrown, nothing but
+ // Exception in thread "main"
+ // would be printed without flushing the PrintWriter, because the JVM exits immediately.
+ s.flush();
}
}