diff options
-rw-r--r-- | org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java index 8d34727c5..44c7aa8fa 100644 --- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java +++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java @@ -37,6 +37,11 @@ public class BCException extends RuntimeException { 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); } @@ -49,15 +54,13 @@ public class BCException extends RuntimeException { 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(); } } |