]> source.dussan.org Git - aspectj.git/commitdiff
test and fix for 138286
authoraclement <aclement>
Wed, 26 Apr 2006 16:45:17 +0000 (16:45 +0000)
committeraclement <aclement>
Wed, 26 Apr 2006 16:45:17 +0000 (16:45 +0000)
tests/bugs152/pr138286/A.aj [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java
tests/src/org/aspectj/systemtest/ajc152/ajc152.xml
weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java

diff --git a/tests/bugs152/pr138286/A.aj b/tests/bugs152/pr138286/A.aj
new file mode 100644 (file)
index 0000000..2c20ea7
--- /dev/null
@@ -0,0 +1,31 @@
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.*;
+
+@Retention(RUNTIME)
+@Inherited
+@interface MyAnnotation {}
+
+public aspect A perthis(annotatedClasses()) {
+       
+       pointcut annotatedClasses() : @this(MyAnnotation);
+       
+       before(): initialization(*.new(..)) {System.err.println(thisJoinPoint.getSignature().getDeclaringType()); }
+       
+       public static void main(String []argv) {
+         new Foo();
+         new Goo();
+         new Boo();
+         new Soo();
+       }
+}
+
+// yes/no indicates if runtime match expected for staticinitialization
+
+@MyAnnotation class Foo { } // YES
+
+class Goo { }               // NO
+
+@MyAnnotation class Boo { } // YES
+
+class Soo extends Boo { }   // YES
\ No newline at end of file
index 4026dc802240488810f92b69decbf98b2cf5e2c0..261cc4f8b0dd1dc418210e8921d09195b1f90b99 100644 (file)
@@ -38,6 +38,8 @@ public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
 //  public void testReferencePCutInPerClause_pr138219() { runTest("Can't use a FQ Reference pointcut in any pointcut expression referenced by a per-clause");}
 //  public void testDoubleAnnotationMatching_pr138223() { runTest("Double at annotation matching (no binding)");}
   
+  public void testNoClassCastExceptionWithPerThis_pr138286() { runTest("No ClassCastException with perThis");}
+  
 // this next one reported as a bug by Rob Harrop, but I can't reproduce the failure yet...
 //public void testAtAspectWithReferencePCPerClause_pr138220() { runTest("@Aspect with reference pointcut in perclause");}  
 
index cb7cd1fe1c79ba6893f538c83290e09c0de7551e..0d49de3718fe8aa8c37126fcb692b8a3420ec41f 100644 (file)
       </compile>
     </ajc-test>
 
+    <ajc-test dir="bugs152/pr138286" pr="138286" title="No ClassCastException with perThis">
+      <compile files="A.aj" options="-1.5 -showWeaveInfo">      
+           <message kind="weave" text="Join point 'initialization(void A.&lt;init&gt;())' in Type 'A' (A.aj:9) advised by before advice from 'A' (A.aj:13) [with runtime test]"/>
+           <message kind="weave" text="Join point 'initialization(void Soo.&lt;init&gt;())' in Type 'Soo' (A.aj:31) advised by before advice from 'A' (A.aj:13) [with runtime test]"/>
+           <message kind="weave" text="Join point 'initialization(void Goo.&lt;init&gt;())' in Type 'Goo' (A.aj:27) advised by before advice from 'A' (A.aj:13) [with runtime test]"/>
+           <message kind="weave" text="Join point 'initialization(void Foo.&lt;init&gt;())' in Type 'Foo' (A.aj:25) advised by before advice from 'A' (A.aj:13) [with runtime test]"/>
+           <message kind="weave" text="Join point 'initialization(void Boo.&lt;init&gt;())' in Type 'Boo' (A.aj:29) advised by before advice from 'A' (A.aj:13) [with runtime test]"/>
+      </compile>
+      <run class="A">
+        <stderr>
+          <line text="class Foo"/>
+          <line text="class Boo"/>
+          <line text="class Boo"/> <!-- this one is because of the super() call in Soo's default ctor -->
+          <line text="class Soo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+
 </suite>
\ No newline at end of file
index 0d3cb2a5f08451a019b307868571165c7a8a43e7..8a6665df2eeeed4df62232e0382b2d45efa929bf 100644 (file)
@@ -67,7 +67,7 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
         if (m_isTarget) {
             return MAYBE;
         } else {
-            return node.getAnnotationTypePattern();
+               return new AnyWithAnnotationTypePattern( node.getAnnotationTypePattern());
         }
     }
 
@@ -125,9 +125,9 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
 
     public Object visit(ThisOrTargetAnnotationPointcut node, Object data) {
         if (m_isTarget && !node.isThis()) {
-            return node.getAnnotationTypePattern();
+               return new AnyWithAnnotationTypePattern( node.getAnnotationTypePattern());
         } else if (!m_isTarget && node.isThis()) {
-            return node.getAnnotationTypePattern();
+               return new AnyWithAnnotationTypePattern( node.getAnnotationTypePattern());
         } else {
             // perthis(@target(Foo))
             return MAYBE;