diff options
author | aclement <aclement> | 2011-09-02 22:33:11 +0000 |
---|---|---|
committer | aclement <aclement> | 2011-09-02 22:33:11 +0000 |
commit | 49a7b98059209f2454dde2b32875f8809d9f4fd4 (patch) | |
tree | 1483844dc57c87e08d58347ec2f0f7f24514f0f5 | |
parent | 09d62cfc430b911d96ab80e889f6e7c8aee827a1 (diff) | |
download | aspectj-49a7b98059209f2454dde2b32875f8809d9f4fd4.tar.gz aspectj-49a7b98059209f2454dde2b32875f8809d9f4fd4.zip |
356612
-rw-r--r-- | tests/bugs1612/pr356612/AnnoBinding.java | 68 | ||||
-rw-r--r-- | tests/bugs1612/pr356612/AnnoBinding2.java | 48 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc1612/Ajc1612Tests.java | 8 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc1612/ajc1612.xml | 18 |
4 files changed, 142 insertions, 0 deletions
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 @@ <suite> +<ajc-test dir="bugs1612/pr356612" title="annotation field binding optimization"> +<compile files="AnnoBinding.java" options="-1.5"/> +<run class="AnnoBinding"> +</run> +</ajc-test> + + +<ajc-test dir="bugs1612/pr356612" title="annotation field binding optimization - 2"> +<compile files="AnnoBinding2.java" options="-1.5"/> +<run class="AnnoBinding2"> +<stdout> +<line text="get(int AnnoBinding2.field1) @Marker(message=foo)"/> +<line text="get(int AnnoBinding2.field2) @Marker(message=bar)"/> +<line text="2 ajc$anno$NNN fields"/> +</stdout> +</run> +</ajc-test> + <ajc-test dir="bugs1612/pr354683" title="itd split compilation"> <compile files="util/CommonData.java util/CommonDataImpl.java util/CommonDataImplementation.aj util/DerivedCommonDataInterface.java util/DerivedCommonDataInterfaceImpl.java util/DerivedCommonDataInterfaceImplementation.aj" options="-1.5" outjar="code.jar"/> <compile files="main/AbstractBaseClass.java main/DerivedClass.java main/Whatever.java " options="-1.5" aspectpath="code.jar"/> |