org.aspectj/tests/new/DeclaredExcs.java

98 lines
2.0 KiB
Java

import org.aspectj.testing.Tester;
public class DeclaredExcs {
public static void main(String[] args) { test(); }
public static void test() {
Foo foo = new Foo();
Tester.checkEqual(foo.foo(), "success", "foo()");
try {
foo.bar(false);
} catch (Exception e) {
Tester.check(false, "shouldn't catch");
}
try {
Bar bar = new Bar(false);
} catch (MyException e) {
Tester.check(false, "shouldn't catch");
}
try {
Bar bar = Bar.getNewBar(true);
Tester.check(false, "shouldn't get here");
} catch (MyException e) {
Tester.check(true, "should catch");
}
}
}
class Foo {
public void bar(boolean throwIt) throws Exception {
if (throwIt) {
throw new MyException("you asked for it");
}
}
public String foo() {
try {
bar(false);
} catch (Exception exc) {
Tester.check(false, "shouldn't catch anything");
}
try {
bar(true);
} catch (MyException exc) {
return "success";
} catch (Exception e1) {
return "failure";
}
return "failure";
}
}
class Bar {
String value;
public static Bar getNewBar(boolean throwIt) throws MyException {
return new Bar(throwIt);
}
public Bar(boolean throwIt) throws MyException {
if (throwIt) {
throw new MyException("you asked for it from constructor");
}
value = "boolean";
}
public Bar(String value) {
this.value = value;
}
}
class MyException extends Exception {
public MyException(String label) {
super(label);
}
}
aspect A {
before (): (this(*) && execution(* *(..)) || execution(new(..))) && !within(A) {
//System.out.println("entering: "+thisJoinPoint);
}
after (): (this(*) && execution(* *(..)) || execution(new(..))) && !within(A) {
//System.out.println("exiting: "+thisJoinPoint);
}
Object around(): this(*) && call(* *(..)) {
//System.out.println("start around: "+thisJoinPoint);
Object ret = proceed();
//System.out.println("end around: "+thisJoinPoint);
return ret;
}
}