aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bugs
diff options
context:
space:
mode:
authoracolyer <acolyer>2004-01-13 16:10:52 +0000
committeracolyer <acolyer>2004-01-13 16:10:52 +0000
commit87db1e79f6b882af30d382233589ebb1fc732be9 (patch)
tree4eec10b418ac81bd01d79377b2ad21cf29d033aa /tests/bugs
parent009389ac641f01000e27c48da4e1c0087d431b54 (diff)
downloadaspectj-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.java50
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