aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Kriegisch <Alexander@Kriegisch.name>2023-01-18 08:44:26 +0100
committerAlexander Kriegisch <Alexander@Kriegisch.name>2024-04-12 15:32:39 +0200
commit7bd0a45144b8cd2fe57432e572d0c8339fecd61f (patch)
tree174093d5794769c731f374273ec2a545af0fc61e
parentf97f77c030534c870168f490710d9110bea32a02 (diff)
downloadaspectj-7bd0a45144b8cd2fe57432e572d0c8339fecd61f.tar.gz
aspectj-7bd0a45144b8cd2fe57432e572d0c8339fecd61f.zip
Improve stack trace printing in BCException
- 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>
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java17
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();
}
}