org.aspectj/tests/new/AdviceThrowsCf.java
2003-03-12 19:51:43 +00:00

94 lines
2.2 KiB
Java

import org.aspectj.testing.Tester;
import java.io.IOException;
public class AdviceThrowsCf {
public static void main(String[] args) {
try {
new C().m1();
Tester.checkFailed("m1");
} catch (CheckedExc ce) {
Tester.checkEqual("b1", ce.getMessage(), "m1");
}
try {
new C().m2();
Tester.checkFailed("m2");
} catch (UncheckedExc ce) {
Tester.checkEqual("b3", ce.getMessage(), "m2");
}
try {
new C().m3();
Tester.checkFailed("m3");
} catch (CheckedExc ce) {
Tester.checkEqual("b1", ce.getMessage(), "m3");
} catch (Exception e) {
Tester.checkFailed("IOException");
System.out.println("m3: " + e);
}
try {
new C().m4();
Tester.checkFailed("m4");
} catch (UncheckedExc ce) {
Tester.checkEqual("b3", ce.getMessage(), "m4");
}
}
}
class CheckedExc extends Exception {
CheckedExc(String m) { super(m); }
}
class UncheckedExc extends RuntimeException {
UncheckedExc(String m) { super(m); }
}
class C {
int x=0;
public void m1() throws CheckedExc {
x += 1;
}
public void m2() throws UncheckedExc {
}
public void m3() throws IOException, CheckedExc {
}
public void m4() {
}
}
aspect A {
pointcut canThrowChecked(): call(* C.m1()) || call(* C.m3());
pointcut canThrowChecked1(): call(* C.m*() throws CheckedExc);
pointcut canThrowUnchecked(): call(* C.m*());
before() throws CheckedExc: canThrowUnchecked() { // ERR: m2 and m4
throw new CheckedExc("b1");
}
before() throws CheckedExc: get(int C.x) { //ERR: all gets
}
before() throws CheckedExc: set(int C.x) { //ERR: all sets
}
before() throws CheckedExc: staticinitialization(C) { //ERR: can't throw
}
void around() throws CheckedExc: canThrowChecked() {
proceed();
}
void around() throws CheckedExc: canThrowUnchecked() { // ERR: can't throw
proceed();
}
void around() throws UncheckedExc: canThrowUnchecked() || set(int C.x) {
proceed();
}
}