From: aclement Date: Fri, 2 Sep 2011 22:33:11 +0000 (+0000) Subject: 356612 X-Git-Tag: V1_6_12~28 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=49a7b98059209f2454dde2b32875f8809d9f4fd4;p=aspectj.git 356612 --- diff --git a/tests/bugs1612/pr356612/AnnoBinding.java b/tests/bugs1612/pr356612/AnnoBinding.java new file mode 100644 index 000000000..7bee9c52f --- /dev/null +++ b/tests/bugs1612/pr356612/AnnoBinding.java @@ -0,0 +1,68 @@ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.aspectj.lang.reflect.FieldSignature; + +@Retention(RetentionPolicy.RUNTIME) +@interface Marker { + String message(); +} + +public class AnnoBinding { + public static void main(String[] argv) { + long stime = System.currentTimeMillis(); + for (int i = 0; i < 10000; i++) { + runOne(); + } + long etime = System.currentTimeMillis(); + long manual = (etime - stime); + stime = System.currentTimeMillis(); + for (int i = 0; i < 10000; i++) { + runTwo(); + } + etime = System.currentTimeMillis(); + long woven = (etime - stime); + System.out.println("woven=" + woven + " manual=" + manual); + if (woven > manual) { + throw new RuntimeException("woven=" + woven + " manual=" + manual); + } + if (X.a != X.b) { + throw new RuntimeException("a=" + X.a + " b=" + X.b); + } + } + + @Marker(message = "string") + static int field1; + + @Marker(message = "string") + static int field2; + + public static void runOne() { + field1 = field1 * 2; // set and get jps + } + + public static void runTwo() { + field1 = field1 * 2; // set and get jps + } + +} + +aspect X { + pointcut pManual(): withincode(* runOne(..)) && get(@Marker * *); + pointcut pWoven(Marker l): withincode(* runTwo(..)) && get(@Marker * * ) && @annotation(l); + + public static int a,b; + + before(): pManual() { + Marker marker = (Marker) ((FieldSignature) thisJoinPointStaticPart.getSignature()).getField().getAnnotation(Marker.class); + String s = marker.message(); + a+=s.length(); + } + + before(Marker l): pWoven(l) { + String s = l.message(); + b+=s.length(); + } + + +} diff --git a/tests/bugs1612/pr356612/AnnoBinding2.java b/tests/bugs1612/pr356612/AnnoBinding2.java new file mode 100644 index 000000000..6c9b0b2be --- /dev/null +++ b/tests/bugs1612/pr356612/AnnoBinding2.java @@ -0,0 +1,48 @@ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.aspectj.lang.reflect.FieldSignature; + +import com.sun.org.apache.bcel.internal.classfile.Field; + +@Retention(RetentionPolicy.RUNTIME) +@interface Marker { + String message(); +} + +public class AnnoBinding2 { + public static void main(String[] argv) { + runOne(); + runTwo(); + java.lang.reflect.Field[] fs = AnnoBinding2.class.getDeclaredFields(); + int count = 0; + for (java.lang.reflect.Field f: fs) { + if (f.getName().startsWith("ajc$anno")) { + count++; + } + } + System.out.println(count+" ajc$anno$NNN fields"); + } + + @Marker(message = "foo") + static int field1; + + @Marker(message = "bar") + static int field2; + + public static void runOne() { + field1 = field1 * 2; // set and get jps + } + + public static void runTwo() { + field2 = field2 * 2; // set and get jps + } +} + +aspect X { + pointcut pWoven(Marker l): withincode(* run*(..)) && get(@Marker * * ) && @annotation(l); + + before(Marker l): pWoven(l) { + System.out.println(thisJoinPointStaticPart+" "+l); + } +} diff --git a/tests/src/org/aspectj/systemtest/ajc1612/Ajc1612Tests.java b/tests/src/org/aspectj/systemtest/ajc1612/Ajc1612Tests.java index 46eb1b24b..4667d617a 100644 --- a/tests/src/org/aspectj/systemtest/ajc1612/Ajc1612Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc1612/Ajc1612Tests.java @@ -35,6 +35,14 @@ public class Ajc1612Tests extends org.aspectj.testing.XMLBasedAjcTestCase { // runTest("itd split compilation"); // } + public void testAnnotationFieldBindingOptimization_356612() throws Exception { + runTest("annotation field binding optimization"); + } + + public void testAnnotationFieldBindingOptimization_356612_2() throws Exception { + runTest("annotation field binding optimization - 2"); + } + public void testThisAspectInstance_239649_1() throws Exception { // simple case runTest("thisAspectInstance - 1"); diff --git a/tests/src/org/aspectj/systemtest/ajc1612/ajc1612.xml b/tests/src/org/aspectj/systemtest/ajc1612/ajc1612.xml index 657a9281a..07b5a9993 100644 --- a/tests/src/org/aspectj/systemtest/ajc1612/ajc1612.xml +++ b/tests/src/org/aspectj/systemtest/ajc1612/ajc1612.xml @@ -2,6 +2,24 @@ + + + + + + + + + + + + + + + + + +