diff options
author | acolyer <acolyer> | 2004-01-13 16:10:52 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2004-01-13 16:10:52 +0000 |
commit | 87db1e79f6b882af30d382233589ebb1fc732be9 (patch) | |
tree | 4eec10b418ac81bd01d79377b2ad21cf29d033aa /tests/bugs | |
parent | 009389ac641f01000e27c48da4e1c0087d431b54 (diff) | |
download | aspectj-87db1e79f6b882af30d382233589ebb1fc732be9.tar.gz aspectj-87db1e79f6b882af30d382233589ebb1fc732be9.zip |
Bugzilla Bug 44586
After throwing advice on ctors doesn't execute for inter-type decls
Diffstat (limited to 'tests/bugs')
-rw-r--r-- | tests/bugs/AfterThrowingCtor.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/bugs/AfterThrowingCtor.java b/tests/bugs/AfterThrowingCtor.java new file mode 100644 index 000000000..0c2179649 --- /dev/null +++ b/tests/bugs/AfterThrowingCtor.java @@ -0,0 +1,50 @@ +// 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"); + } +}
\ No newline at end of file |