diff options
-rw-r--r-- | tests/ajcTestsFailing.xml | 9 | ||||
-rw-r--r-- | tests/bugs/TjpMistake.java | 29 |
2 files changed, 38 insertions, 0 deletions
diff --git a/tests/ajcTestsFailing.xml b/tests/ajcTestsFailing.xml index 167f12d9e..a15692546 100644 --- a/tests/ajcTestsFailing.xml +++ b/tests/ajcTestsFailing.xml @@ -152,5 +152,14 @@ files="Test_AroundVarBug.java,AroundVarBug.java"/> <run class="Test_AroundVarBug"/> </ajc-test> + + <ajc-test + dir="bugs" + pr="75129" + title="NPE on thisJoinPoint mistake"> + <compile files="TjpMistake.java"> + <message kind="error" line="22"/> + </compile> + </ajc-test> </suite> diff --git a/tests/bugs/TjpMistake.java b/tests/bugs/TjpMistake.java new file mode 100644 index 000000000..4934da278 --- /dev/null +++ b/tests/bugs/TjpMistake.java @@ -0,0 +1,29 @@ +/** @testcase PR#75129 NPE on thisJoinPoint mistake */ +public class TjpMistake { +public static void main(String[] a) { + new C().go(); + new D().go(); + new E().go(); +} +} +interface I { void go();} +class C {} +class D { + public void go() { System.out.println("D.go() in " + this); } +} +class E extends D { +} +aspect A { + declare parents: (C || D) implements I; + public void I.go() { System.out.println("I.go() in " + this); } + before() : execution(* I.*(..)) { + System.out.println( + // mistake caused compiler crash rather than error + thisJoinPoint.getSignature.toLongString() // CE 22 + // correct + //thisJoinPointStaticPart.getSignature().toLongString() + + " " + + thisJoinPoint.getSignature().getDeclaringType() + + " " + + this); } +} |