org.aspectj/tests/bugs/AfterThrowingCtor.java
acolyer 87db1e79f6 Bugzilla Bug 44586
After throwing advice on ctors doesn't execute for inter-type decls
2004-01-13 16:10:52 +00:00

50 lines
1.1 KiB
Java

// pr44586
import org.aspectj.testing.Tester;
public aspect AfterThrowingCtor {
after() throwing (Throwable t) : execution(Foo*.new(..)) {
throw new AdviceRanException();
}
public static void main(String args[]) {
try {
new Foo();
Tester.checkFailed("Advice should not run here");
} catch(IllegalStateException illEx) {
// good, we do not want the advice to run as the
// initialization of an itd field is considered part
// of the initialization join point, but not the execution
// join point.
}
try {
new Foo1();
Tester.checkFailed("Advice should run here");
} catch(AdviceRanException arEx) {
// good, the advice should run as the field initialisation is considered
// part of the execution join point.
}
}
private Object Foo.val = Foo.initVal();
class AdviceRanException extends RuntimeException {};
}
class Foo {
Foo() {
}
static Object initVal() {
throw new IllegalStateException("crash");
}
}
class Foo1 {
Foo1() {
}
private Object val = initVal();
static Object initVal() {
throw new IllegalStateException("crash");
}
}