org.aspectj/tests/new/AfterThrowing.java
2002-12-16 18:51:06 +00:00

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;
}
}
}