Skip to content

Commit

Permalink
Improve stack trace printing in BCException
Browse files Browse the repository at this point in the history
- Bugfix: Flush stream.
- Adjust format to more closely resemble JVM format. E.g., do not print
  the causing exception name twice.
- Add TODO, because this whole custom stack trace printing can just go
  away. The JVM format should do just fine. This commit is merely meant
  to document the decision to remove the cruft in the next commit.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
  • Loading branch information
kriegaex committed Apr 12, 2024
1 parent f97f77c commit 7bd0a45
Showing 1 changed file with 10 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ public BCException(String s, Throwable thrown) {
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);
}
Expand All @@ -49,15 +54,13 @@ public void printStackTrace(PrintWriter s) {
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();
}

}

0 comments on commit 7bd0a45

Please sign in to comment.