|
|
@@ -12,55 +12,21 @@ |
|
|
|
|
|
|
|
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(); |
|
|
|
} |
|
|
|
|
|
|
|
} |