aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bugs167/pr296484/AnnoBinding.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bugs167/pr296484/AnnoBinding.java')
-rw-r--r--tests/bugs167/pr296484/AnnoBinding.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/bugs167/pr296484/AnnoBinding.java b/tests/bugs167/pr296484/AnnoBinding.java
new file mode 100644
index 000000000..08135e5d2
--- /dev/null
+++ b/tests/bugs167/pr296484/AnnoBinding.java
@@ -0,0 +1,81 @@
+import org.aspectj.lang.*;
+import org.aspectj.lang.reflect.*;
+import java.lang.annotation.*;
+
+@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")
+ public static void runOne() {
+ }
+
+ @Marker(message="string")
+ public static void runTwo() {
+ }
+
+ static Annotation ajc$anno$1;
+}
+
+aspect X {
+
+ pointcut pManual(): execution(@Marker * runOne(..));
+ pointcut pWoven(Marker l): execution(@Marker * runTwo(..)) && @annotation(l);
+
+ public static int a,b;
+
+ before(): pManual() {
+ Marker marker = (Marker) ((MethodSignature) thisJoinPointStaticPart.getSignature()).getMethod().getAnnotation(Marker.class);
+ String s = marker.message();
+ a+=s.length();
+ }
+
+ before(Marker l): pWoven(l) {
+ String s = l.message();
+ b+=s.length();
+ }
+}
+
+//
+//0: invokestatic #96; //Method X.aspectOf:()LX;
+//3: getstatic #108; //Field ajc$anno$0:Ljava/lang/Annotation;
+//6: dup
+//7: ifnonnull 30
+//10: ldc #1; //class AnnoBinding
+//12: ldc #109; //String runTwo
+//14: iconst_0
+//15: anewarray #111; //class java/lang/Class
+//18: invokevirtual #115; //Method java/lang/Class.getDeclaredMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Me
+//d;
+//21: ldc #104; //class Marker
+//23: invokevirtual #121; //Method java/lang/reflect/Method.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
+//26: dup
+//27: putstatic #108; //Field ajc$anno$0:Ljava/lang/Annotation;
+//30: nop
+//31: checkcast #104; //class Marker
+//34: invokevirtual #125; //Method X.ajc$before$X$2$ea6844ce:(LMarker;)V
+//37: return \ No newline at end of file