]> source.dussan.org Git - aspectj.git/commitdiff
Further streamline BCException
authorAlexander Kriegisch <Alexander@Kriegisch.name>
Wed, 18 Jan 2023 08:17:43 +0000 (09:17 +0100)
committerAlexander Kriegisch <Alexander@Kriegisch.name>
Fri, 12 Apr 2024 13:32:39 +0000 (15:32 +0200)
- Improvement: Also add CompilationAndWeavingContext for constructor
  with causing exception
- Remove home-brew stack trace printing, just call super constructors

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
bridge/src/main/java/org/aspectj/bridge/context/CompilationAndWeavingContext.java
org.aspectj.matcher/src/main/java/org/aspectj/weaver/BCException.java

index 451c9cca7137864d9e64045e4d4d60cfbb5473c6..c204c78a1df65408ebc991f1f9d3fbbd35fa0aae 100644 (file)
@@ -148,6 +148,16 @@ public class CompilationAndWeavingContext {
                return sb.toString();
        }
 
+       /**
+        * Returns a string description of what the compiler/weaver is currently doing
+        * @param prependNLIfNotEmpty Prepend a newline character to the message? This can be nice when printing the context
+        *        as part of an exception stack trace.
+        */
+       public static String getCurrentContext(boolean prependNLIfNotEmpty) {
+               String context = getCurrentContext();
+               return context.isEmpty() ? context : (prependNLIfNotEmpty ? "\n" : "") + context;
+       }
+
        public static ContextToken enteringPhase(int phaseId, Object data) {
                Stack<ContextStackEntry> contextStack = getContextStack();
                ContextTokenImpl nextToken = nextToken();
index 44c7aa8fa1583e58c83593db82f8f4638e6df7a7..da887fff5e30d44b08d0f119e1c2467e83498ed9 100644 (file)
 
 package org.aspectj.weaver;
 
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
 import org.aspectj.bridge.context.CompilationAndWeavingContext;
 
 /**
  * Exception to use inside the bcweaver.
  */
-@SuppressWarnings("serial")
 public class BCException extends RuntimeException {
-       Throwable thrown;
-
        public BCException() {
-               super();
-       }
+    super();
+  }
 
-       public BCException(String s) {
-               super(s + "\n" + CompilationAndWeavingContext.getCurrentContext());
+       public BCException(String message) {
+               super(message + CompilationAndWeavingContext.getCurrentContext(true));
        }
 
-       public BCException(String s, Throwable thrown) {
-               this(s);
-               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);
+       public BCException(String message, Throwable cause) {
+               super(message + CompilationAndWeavingContext.getCurrentContext(true), cause);
        }
-
-       public void printStackTrace(PrintStream s) {
-               printStackTrace(new PrintWriter(s));
-       }
-
-       public void printStackTrace(PrintWriter s) {
-               super.printStackTrace(s);
-               if (null != thrown) {
-                       s.print("Caused by: ");
-                       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();
-       }
-
 }