@@ -15,12 +15,13 @@ aspect Super { | |||
// second method doesn't exist | |||
pointcut pc1(PR113447 s) : | |||
(this(s) && execution(void method1())) | |||
|| (this(s) && execution(void method2())); | |||
(this(PR113447) && this(s) && execution(void method1()) && this(PR113447)) | |||
|| (this(s) && execution(void method2()) && this(PR113447)); | |||
before(PR113447 s) : pc1(s) { | |||
} | |||
/* | |||
// second method does exist | |||
pointcut pc2(PR113447 s) : | |||
(this(s) && execution(void method1())) | |||
@@ -36,5 +37,6 @@ aspect Super { | |||
before(PR113447 s) : pc3(s) { | |||
} | |||
*/ | |||
} |
@@ -0,0 +1,65 @@ | |||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.RetentionPolicy; | |||
@Retention(RetentionPolicy.RUNTIME) | |||
@interface Annotation{}; | |||
@Annotation | |||
public class PR113447a { | |||
public static void main(String[] args) { | |||
PR113447a me = new PR113447a(); | |||
me.method1(); | |||
me.method3(); | |||
me.method4(2); | |||
} | |||
public void method1(){} | |||
public void method3(){} | |||
public void method4(int i){} | |||
public void method5(int i){} | |||
} | |||
aspect Super { | |||
// second method doesn't exist | |||
pointcut pc1(Annotation a) : | |||
(@this(a) && execution(void method1())) | |||
|| (@this(a) && execution(void method2())); | |||
before(Annotation a) : pc1(a) {} | |||
// second method does exist | |||
pointcut pc2(Annotation a) : | |||
(@this(a) && execution(void method1())) | |||
|| (@this(a) && execution(void method3())); | |||
before(Annotation a) : pc2(a) {} | |||
// second method doesn't exist | |||
pointcut pc3(Annotation a) : | |||
(@target(a) && call(void method1())) | |||
|| (@target(a) && call(void method2())); | |||
before(Annotation a) : pc3(a) { | |||
} | |||
// second method does exist | |||
pointcut pc4(Annotation a) : | |||
(@target(a) && call(void method1())) | |||
|| (@target(a) && call(void method3())); | |||
before(Annotation a) : pc4(a) { | |||
} | |||
// @this equivalent of BaseTests.test024 which was affected by | |||
// the fix for the non annotation version | |||
pointcut p(Annotation a) : | |||
@target(a) && (call(void method4(int)) | |||
|| call(void method5(int))); | |||
before(Annotation a) : p(a) {} | |||
after(Annotation a): p(a) {} | |||
} |
@@ -0,0 +1,27 @@ | |||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.RetentionPolicy; | |||
@Retention(RetentionPolicy.RUNTIME) | |||
@interface Annotation{}; | |||
@Annotation | |||
public class PR113447b { | |||
public static void main(String[] args) { | |||
PR113447b me = new PR113447b(); | |||
me.method4(1); | |||
} | |||
public void method4(int i){} | |||
public void method5(int i){} | |||
} | |||
aspect Super { | |||
pointcut p(Annotation a) : | |||
@within(a) && (call(void method4(int)) | |||
|| call(void method5(int))); | |||
before(Annotation a) : p(a) {} | |||
} |
@@ -0,0 +1,27 @@ | |||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.RetentionPolicy; | |||
@Retention(RetentionPolicy.RUNTIME) | |||
@interface Annotation{}; | |||
public class PR113447c { | |||
@Annotation | |||
public static void main(String[] args) { | |||
PR113447c me = new PR113447c(); | |||
me.method4(1); | |||
} | |||
public void method4(int i){} | |||
public void method5(int i){} | |||
} | |||
aspect Super { | |||
pointcut p(Annotation a) : | |||
@withincode(a) && (call(void method4(int)) | |||
|| call(void method5(int))); | |||
before(Annotation a) : p(a) {} | |||
} |
@@ -0,0 +1,25 @@ | |||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.RetentionPolicy; | |||
@Retention(RetentionPolicy.RUNTIME) | |||
@interface Annotation{}; | |||
public class PR113447d { | |||
public static void main(String[] args) { | |||
PR113447d me = new PR113447d(); | |||
me.method4(1); | |||
} | |||
@Annotation public void method4(int i){} | |||
@Annotation public void method5(int i){} | |||
} | |||
aspect Super { | |||
pointcut p(Annotation a) : | |||
@annotation(a) && (call(void method4(int)) | |||
|| call(void method5(int))); | |||
before(Annotation a) : p(a) {} | |||
} |
@@ -0,0 +1,36 @@ | |||
public class PR113447e { | |||
public static void main(String[] args) { | |||
PR113447e me = new PR113447e(); | |||
me.method1(1); | |||
me.method3(2); | |||
} | |||
public void method1(int i){} | |||
public void method3(int i){} | |||
} | |||
aspect Super { | |||
// second method doesn't exist | |||
pointcut pc1(int i) : | |||
(args(i) && call(void method1(int))) | |||
|| (args(i) && call(void method2(int))); | |||
before(int i) : pc1(i) {} | |||
// second method does exist | |||
pointcut pc2(int i) : | |||
(args(i) && call(void method1(int))) | |||
|| (args(i) && call(void method3(int))); | |||
before(int i) : pc2(i) {} | |||
// ensure this still works | |||
pointcut pc3(int i) : | |||
args(i) && (call(void method1(int)) || call(void method2(int))); | |||
before(int i) : pc3(i) {} | |||
after(int i) : pc3(i) {} | |||
} |
@@ -658,10 +658,6 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
runTest("weaveinfo message for declare at method on an ITDd method"); | |||
} | |||
public void testNoVerifyErrorWithTwoThisPCDs_pr113447() { | |||
runTest("no verify error with two this pcds"); | |||
} | |||
public void testITDCWithNoExplicitConsCall() { | |||
runTest("ITDC with no explicit cons call"); | |||
} | |||
@@ -682,6 +678,31 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
runTest("pointcut expression containing 'assert'"); | |||
} | |||
public void testNoVerifyErrorWithTwoThisPCDs_pr113447() { | |||
runTest("no verify error with two this pcds"); | |||
} | |||
public void testNoVerifyErrorWithTwoAtThisPCDs_pr113447() { | |||
runTest("no verify error with two at this pcds"); | |||
} | |||
public void testNoVerifyErrorWithAtWithinPCDs_pr113447() { | |||
runTest("no verify error with at within pcds"); | |||
} | |||
public void testNoVerifyErrorWithAtWithincodePCDs_pr113447() { | |||
runTest("no verify error with at withincode pcds"); | |||
} | |||
public void testNoVerifyErrorWithAtAnnotationPCDs_pr113447() { | |||
runTest("no verify error with at annotation pcds"); | |||
} | |||
public void testNoVerifyErrorWithTwoArgsPCDs_pr113447() { | |||
runTest("no verify error with two args pcds"); | |||
} | |||
// helper methods..... | |||
public SyntheticRepository createRepos(File cpentry) { |
@@ -934,12 +934,42 @@ | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="bugs150" title="no verify error with two this pcds"> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with two this pcds"> | |||
<compile files="PR113447.java"> | |||
</compile> | |||
<run class="PR113447"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with two at this pcds"> | |||
<compile files="PR113447a.java" options="-1.5"> | |||
</compile> | |||
<run class="PR113447a"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with at within pcds"> | |||
<compile files="PR113447b.java" options="-1.5"> | |||
</compile> | |||
<run class="PR113447b"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with at withincode pcds"> | |||
<compile files="PR113447c.java" options="-1.5"> | |||
</compile> | |||
<run class="PR113447c"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with at annotation pcds"> | |||
<compile files="PR113447d.java" options="-1.5"> | |||
</compile> | |||
<run class="PR113447d"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150/pr113447" title="no verify error with two args pcds"> | |||
<compile files="PR113447e.java" options="-1.5"> | |||
</compile> | |||
<run class="PR113447e"/> | |||
</ajc-test> | |||
<!-- ============================================================================ --> | |||
<!-- ============================================================================ --> | |||