--- /dev/null
+import org.aspectj.lang.annotation.*;
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+
+@Aspect("perthis(transactional())")
+public class Code {
+ @Pointcut("execution(@Transactional * * (..))")
+ public void transactional() { }
+
+ public static void main(String[] args) {
+ print(AAA.class);
+ print(BBB.class);
+ print(CCC.class);
+ }
+
+ public static void print(Class clazz) {
+ System.out.println(clazz.getName());
+ Class[] ifs = clazz.getInterfaces();
+ if (ifs!=null) {
+ for (int i=0;i<ifs.length;i++) {
+ System.out.println(ifs[i]);
+ }
+ }
+ Field[] fs = clazz.getDeclaredFields();
+ if (fs!=null) {
+ for (int i=0;i<fs.length;i++) {
+ System.out.println(fs[i]);
+ }
+ }
+ }
+}
+
+class AAA {
+ public void m() { }
+}
+
+class BBB {
+ public void m() { }
+}
+
+class CCC {
+ @Transactional
+ public void m() { }
+}
+
+
+@Retention(RetentionPolicy.RUNTIME) @interface Transactional {}
+
--- /dev/null
+import org.aspectj.lang.annotation.*;
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import org.aspectj.lang.*;
+
+@Aspect("perthis(transactional())")
+public class Code2 {
+ @Pointcut("execution(@Transactional * * (..))")
+ public void transactional() { }
+
+ @Before("execution(* *(..))")
+ public void m(JoinPoint.StaticPart thisJoinPointStaticPart) {
+ System.out.println(thisJoinPointStaticPart);
+ }
+
+ public static void main(String[] args) {
+ new AAA().m();
+ new BBB().m();
+ new CCC().m();
+ }
+
+}
+
+class AAA {
+ public void m() { }
+}
+
+class BBB {
+ public void m() { }
+}
+
+class CCC {
+ @Transactional
+ public void m() { }
+}
+
+
+@Retention(RetentionPolicy.RUNTIME) @interface Transactional {}
+
--- /dev/null
+import org.aspectj.lang.annotation.*;
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import org.aspectj.lang.*;
+
+@Aspect("perthis(transactional())")
+public class Code3 {
+ @Pointcut("execution(@Transactional * * (..))")
+ public void transactional() { }
+
+ @Before("execution(* *(..))")
+ public void m(JoinPoint.StaticPart thisJoinPointStaticPart) {
+ System.out.println(thisJoinPointStaticPart);
+ }
+
+ public static void main(String[] args) {
+ new AAA().m();
+ new BBB().m();
+ new CCC().m();
+ }
+
+}
+
+aspect XXX {
+ @Transactional public void CCC.m() {}
+}
+
+class AAA {
+ public void m() { }
+}
+
+class BBB {
+ public void m() { }
+}
+
+class CCC {
+}
+
+
+@Retention(RetentionPolicy.RUNTIME) @interface Transactional {}
+
// runTest("itd split compilation");
// }
+ public void testPervasivePerthis_354470() throws Exception {
+ runTest("perthis too pervasive");
+ }
+
+ public void testPervasivePerthis_354470_2() throws Exception {
+ runTest("perthis too pervasive 2");
+ }
+
+ public void testPervasivePerthis_354470_3() throws Exception {
+ runTest("perthis too pervasive 3");
+ }
+
public void testNotEqualWithAnnotationValues_357013() throws Exception {
runTest("annotation values not equal");
}
<suite>
+<ajc-test dir="bugs1612/pr354470" title="perthis too pervasive">
+<compile files="Code.java" options="-1.5"/>
+<run class="Code">
+<stdout>
+ <line text="AAA"/>
+ <line text="BBB"/>
+ <line text="CCC"/>
+ <line text="interface Code$ajcMightHaveAspect"/>
+ <line text="private transient Code CCC.ajc$Code$perObjectField"/>
+</stdout></run>
+</ajc-test>
+
+<ajc-test dir="bugs1612/pr354470" title="perthis too pervasive 2">
+<compile files="Code2.java" options="-1.5"/>
+<run class="Code2">
+<stdout>
+ <line text="execution(void CCC.m())"/>
+</stdout></run>
+</ajc-test>
+
+<ajc-test dir="bugs1612/pr354470" title="perthis too pervasive 3">
+<compile files="Code3.java" options="-1.5"/>
+<run class="Code3">
+<stdout>
+ <line text="execution(void CCC.m())"/>
+</stdout></run>
+</ajc-test>
+
<ajc-test dir="bugs1612/prx" title="class reference in annotation value">
<compile files="C.java" options="-1.5 -showWeaveInfo">
<message kind="weave" text="Join point 'field-get(int C.i)' in Type 'C' (C.java:17) advised by before advice from 'X' (C.java:22)"/>