mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-14 02:10:40 +02:00
93 lines
2.5 KiB
Java
93 lines
2.5 KiB
Java
import org.aspectj.testing.Tester;
|
|
|
|
import java.util.*;
|
|
|
|
public class AfterThrowing {
|
|
public static void main(String[] args) { test(); }
|
|
|
|
public static void test() {
|
|
throwException(true);
|
|
Tester.check("Throwable:throwException");
|
|
Tester.check("Exception:throwException");
|
|
|
|
throwRuntimeException(true);
|
|
Tester.check("Throwable:throwRuntimeException");
|
|
Tester.check("RuntimeException:throwRuntimeException");
|
|
|
|
throwError(true);
|
|
Tester.check("Throwable:throwError");
|
|
|
|
throwMyException(true);
|
|
Tester.check("Throwable:throwMyException");
|
|
Tester.check("Exception:throwMyException");
|
|
Tester.check("MyException:throwMyException");
|
|
}
|
|
|
|
static void throwNothing(boolean b) { }
|
|
|
|
static void throwException(boolean b) throws Exception {
|
|
if (b) throw new Exception();
|
|
throwError(false);
|
|
}
|
|
|
|
static void throwRuntimeException(boolean b) {
|
|
if (b) throw new RuntimeException();
|
|
}
|
|
|
|
static String throwError(boolean b) {
|
|
int[] i = new int[10];
|
|
// this line is to make sure ajc doesn't think it needs to worry about a
|
|
// CloneNotSupportedException when arrays are cloned
|
|
i = (int[])i.clone();
|
|
|
|
if (b) throw new Error();
|
|
return "foo";
|
|
}
|
|
|
|
static Object throwMyException(boolean b) throws MyException {
|
|
if (b) throw new MyException();
|
|
return new Integer(10);
|
|
}
|
|
|
|
public static class MyException extends Exception { }
|
|
}
|
|
|
|
|
|
aspect A {
|
|
pointcut throwerCut(): within(AfterThrowing) && execution(* *(boolean));
|
|
|
|
|
|
after () throwing (Throwable t): throwerCut() {
|
|
Tester.note("Throwable:" + thisJoinPointStaticPart.getSignature().getName());
|
|
}
|
|
|
|
after () throwing (Exception t): throwerCut() {
|
|
Tester.note("Exception:" + thisJoinPoint.getSignature().getName());
|
|
}
|
|
|
|
after () throwing (RuntimeException t): throwerCut() {
|
|
Tester.note("RuntimeException:" + thisJoinPointStaticPart.getSignature().getName());
|
|
}
|
|
|
|
after () throwing (AfterThrowing.MyException t): throwerCut() {
|
|
Tester.note("MyException:" + thisJoinPoint.getSignature().getName());
|
|
}
|
|
|
|
pointcut catchThrowsFrom():
|
|
within(AfterThrowing) && call(* AfterThrowing.*(boolean));
|
|
|
|
|
|
declare soft: Throwable: catchThrowsFrom();
|
|
|
|
Object around(): catchThrowsFrom() {
|
|
try {
|
|
return proceed();
|
|
} catch (Throwable t) {
|
|
//System.out.println("caught " + t);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
|