]> source.dussan.org Git - aspectj.git/commitdiff
Testcases and fix for using @target() when the annotation is in a package.
authoraclement <aclement>
Mon, 7 Feb 2005 13:29:29 +0000 (13:29 +0000)
committeraclement <aclement>
Mon, 7 Feb 2005 13:29:29 +0000 (13:29 +0000)
tests/java5/annotations/binding/usingPackageNames/MyAnnotation.java [new file with mode: 0644]
tests/java5/annotations/binding/usingPackageNames/MyAspect.aj [new file with mode: 0644]
tests/java5/annotations/binding/usingPackageNames/MyClass.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc150/AnnotationBinding.java
weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java
weaver/src/org/aspectj/weaver/bcel/TypeAnnotationAccessVar.java
weaver/src/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.java

diff --git a/tests/java5/annotations/binding/usingPackageNames/MyAnnotation.java b/tests/java5/annotations/binding/usingPackageNames/MyAnnotation.java
new file mode 100644 (file)
index 0000000..1e6dcbd
--- /dev/null
@@ -0,0 +1,6 @@
+package test;
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MyAnnotation {}
+
diff --git a/tests/java5/annotations/binding/usingPackageNames/MyAspect.aj b/tests/java5/annotations/binding/usingPackageNames/MyAspect.aj
new file mode 100644 (file)
index 0000000..41fda55
--- /dev/null
@@ -0,0 +1,8 @@
+package test;\r
+\r
+public aspect MyAspect {\r
+  after(test.MyAnnotation ma) : set (public String test.MyClass._myField) && @target(ma){\r
+    System.err.println("pointcut matching : " + ma);\r
+  }\r
+}\r
+\r
diff --git a/tests/java5/annotations/binding/usingPackageNames/MyClass.java b/tests/java5/annotations/binding/usingPackageNames/MyClass.java
new file mode 100644 (file)
index 0000000..6a373d0
--- /dev/null
@@ -0,0 +1,13 @@
+package test;
+@MyAnnotation public class MyClass {
+
+  public String _myField;
+                
+  public static void main(String[] args) {
+    new MyClass().setMyField("test");
+  }
+                
+  public void setMyField(String nv) {
+    this._myField = nv;
+  }
+}
index 811b0d6b2aa57797fb4a8b0c95ad8f20307aca27..61b704667464ef025615f5b254e7e4e467c950c2 100644 (file)
@@ -107,6 +107,14 @@ public class AnnotationBinding extends TestUtils {
        RunResult rR = run("AtTarget4");
   }
   
+  // @target() with an annotation in a package
+  public void testAtTargetAnnotationBinding5() {
+    CompilationResult cR = ajc(new File(baseDir,"usingPackageNames"),
+      new String[]{"MyAspect.aj","MyAnnotation.java","MyClass.java","-1.5"});
+    assertMessages(cR,new EmptyMessageSpec()); 
+    RunResult rR = run("test.MyClass");
+  }
+  
   
   ///////////////////////////////////// @THIS
   
index 5d8d432e81e903133b8ee04b8e6fa3d503e23a5a..553da757ee04fc776adb6ffde66f45b708060aa4 100644 (file)
@@ -186,7 +186,8 @@ public class BcelRenderer implements ITestVisitor, IExprVisitor {
         Member getClass = Member.method(TypeX.OBJECT, 0, "getClass", "()Ljava/lang/Class;");
         il.append(Utility.createInvoke(fact, world, getClass));
         // aload annotationClass
-        il.append(fact.createConstant(new ObjectType(hasAnnotation.getAnnotationType().getClassName())));
+        String s = hasAnnotation.getAnnotationType().getName();
+        il.append(fact.createConstant(new ObjectType(hasAnnotation.getAnnotationType().getName())));
 //        int annClassIndex = fact.getConstantPool().addClass(hasAnnotation.getAnnotationType().getSignature());
 //        il.append(new LDC_W(annClassIndex));
         Member isAnnotationPresent = Member.method(TypeX.forName("java/lang/Class"),0,
index c30e4ba5829a8446cce438d458cb2872b6e67686..3bcac2842f4e3a412721785b15831d17c635f7f9 100644 (file)
@@ -61,7 +61,7 @@ public class TypeAnnotationAccessVar extends BcelVar {
                Type jlaAnnotation = BcelWorld.makeBcelType(TypeX.forSignature("Ljava.lang.annotation.Annotation;"));
                il.append(target.createLoad(fact)); 
         il.append(fact.createInvoke("java/lang/Object","getClass",jlClass,new Type[]{},Constants.INVOKEVIRTUAL));
-               il.append(fact.createConstant(new ObjectType(toType.getClassName())));
+               il.append(fact.createConstant(new ObjectType(toType.getName())));
                il.append(fact.createInvoke("java/lang/Class","getAnnotation",jlaAnnotation,new Type[]{jlClass},Constants.INVOKEVIRTUAL));
                il.append(Utility.createConversion(fact,jlaAnnotation,BcelWorld.makeBcelType(toType)));
                return il;
index 64dac28ffffe0cbe03aaa8dd9db618ee7cb027d4..23a36e84da1aab7b2ee3317419b509fd3f362117 100644 (file)
@@ -118,7 +118,7 @@ public class ExactAnnotationTypePattern extends AnnotationTypePattern {
                } else {
                        // Non binding case
 
-                       String cleanname = annotationType.getClassName();
+                       String cleanname = annotationType.getName();
                        annotationType = scope.getWorld().resolve(annotationType,true);
                        
                        // We may not have found it if it is in a package, lets look it up...