]> source.dussan.org Git - aspectj.git/commitdiff
Improve Ajc165Tests.testFunkyPointcut_pr272233_2
authorAlexander Kriegisch <Alexander@Kriegisch.name>
Thu, 19 Jan 2023 12:13:15 +0000 (13:13 +0100)
committerAlexander Kriegisch <Alexander@Kriegisch.name>
Fri, 12 Apr 2024 13:32:39 +0000 (15:32 +0200)
Add more funky pointcuts concerning 'void[]' and pointcuts matching
arrays of generic types. Remove TODO after previously committed bugfix.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
tests/bugs165/pr272233/Iffy2.java
tests/src/test/resources/org/aspectj/systemtest/ajc165/ajc165.xml

index 2245f7d8da98d623eb5072b188ec6b12093951a7..8c514bdaab0198d6a44f82379218479932c8c98d 100644 (file)
@@ -1,50 +1,60 @@
 import java.util.*;
+
 import org.aspectj.lang.annotation.*;
 
 @Aspect
 class Iffy2 {
 
+  // Match getCollectionArray(), getIntegerCollectionArray()
   @Before("execution(!void *(..))")
-  public void advice1() {}
+  public void nonVoid() { }
 
-  @Before("execution(!void[] *(..))")
-  public void advice2() {}
+  // Do not match anything, because void[] is an illegal type
+  @Before("execution(void[] *(..))")
+  public void voidArray() {
+    // This does not compile in Java
+    // void[] voids = new void[5];
+  }
 
-  @Before("execution(!void *(..))")
-  public void advice3() {}
+  // Match getCollectionArray() and myVoid(), getIntegerCollectionArray(), because void[] is an illegal type which
+  // cannot be resolved/matched. The negation of an unmatched type, however, matches any type, similar to how
+  // !my.UnknownType would also match all other types.
+  @Before("execution(!void[][] *(..))")
+  public void nonVoidArray() { }
 
+  // Match getCollectionArray(), getIntegerCollectionArray()
   @Before("execution(*..Collection[] *(..))")
-  public void advice4() {}
+  public void wildcardRawCollectionArray() { }
 
+  // Match getCollectionArray()
   @Before("execution(java.util.Collection<?>[] *(..))")
-  public void advice5() {}
-
-  /**
-   * TODO: This pointcut is not parsed correctly. Obviously, the combination of
-   * '*' and '&lt;?&gt;' leads to an AJ core dump with this error message:
-   * <p>
-   * <code>
-   *   org.aspectj.weaver.BCException: malformed org.aspectj.weaver.PointcutDeclaration attribute (length:219)
-   *   org.aspectj.weaver.BCException: Bad type signature *
-   *     at org.aspectj.weaver.AjAttribute.read(AjAttribute.java:137)
-   *     at org.aspectj.weaver.bcel.Utility.readAjAttributes(Utility.java:102)
-   *     at org.aspectj.weaver.bcel.BcelMethod.unpackAjAttributes(BcelMethod.java:197)
-   *     at org.aspectj.weaver.bcel.BcelMethod.&lt;init&gt;(BcelMethod.java:91)
-   *     at org.aspectj.weaver.bcel.BcelObjectType.getDeclaredMethods(BcelObjectType.java:290)
-   *     at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:870)
-   *     at org.aspectj.weaver.ResolvedType.getDeclaredAdvice(ResolvedType.java:1028)
-   *     at org.aspectj.weaver.ResolvedType.getDeclaredShadowMungers(ResolvedType.java:1068)
-   *     at org.aspectj.weaver.ResolvedType.collectShadowMungers(ResolvedType.java:868)
-   *     at org.aspectj.weaver.ResolvedType.collectCrosscuttingMembers(ResolvedType.java:794)
-   *     at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:112)
-   *     at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:67)
-   *     at org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave(BcelWeaver.java:512)
-   * </code>
-   */
-  //@Before("execution(*..Collection<?>[] *(..))")
-  public void advice6() {}
+  public void exactGenericCollectionArray() { }
+
+  // Match getCollectionArray()
+  @Before("execution(*..Collection<?>[] *(..))")
+  public void wildcardGenericCollectionArray() { }
+
+  // Do not match anything
+  @Before("execution(*..Collection<String>[] *(..))")
+  public void wildcardGenericCollectionArrayOfString() { }
+
+  // Match getIntegerCollectionArray()
+  @Before("execution(*..Collection<Integer>[] *(..))")
+  public void wildcardGenericCollectionArrayOfInteger() { }
+
+  // Do not match anything. The fact that primitive type int is illegal as a generic type parameter, is not mentioned
+  // in any warning.
+  @Before("execution(*..Collection<int>[] *(..))")
+  public void wildcardGenericCollectionArrayOfPrimitiveInt() { }
+
+  public void myVoid() { }
 
   public Collection<?>[] getCollectionArray() {
-        return null;
+    return null;
   }
+
+  public Collection<Integer>[] getIntegerCollectionArray() {
+    return null;
+  }
+
 }
index f48581f87db74836d0a9aafc3f56d918b1cc7fc7..cfdde87009ff3c4c3817e681ab83cc51cf831574 100644 (file)
 
    <ajc-test dir="bugs165/pr272233" title="funky pointcut 2">
      <compile files="Iffy2.java" options="-1.5 -showWeaveInfo">
+
+       <!-- Should occur twice, but messages are identical, so they cannot be counted -->
+       <message kind="warning" text="arrays cannot have a void type, but found 'void[]' in pointcut [Xlint:arrayCannotBeVoid]"/>
        <message kind="warning" text="arrays cannot have a void type, but found 'void[]' in pointcut [Xlint:arrayCannotBeVoid]"/>
-       <message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:8)"/>
-       <message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:11)"/>
-       <message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:14)"/>
-       <message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:17)"/>
-       <message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:20)"/>
-       <!-- TODO: Activate 'Iffy2.advice6()' pointcut after pointcut parsing problem has been fixed. -->
-       <!--<message kind="weave" text="advised by before advice from 'Iffy2' (Iffy2.java:XX)"/>-->
+
+       <message kind="warning" text="advice defined in Iffy2 has not been applied [Xlint:adviceDidNotMatch]"     line="14"/>
+       <message kind="warning" text="advice defined in Iffy2 has not been applied [Xlint:adviceDidNotMatch]"     line="39"/>
+       <message kind="warning" text="advice defined in Iffy2 has not been applied [Xlint:adviceDidNotMatch]"     line="48"/>
+
+       <message kind="weave" text="method-execution(void Iffy2.myVoid())' in Type 'Iffy2' (Iffy2.java:50) advised by before advice from 'Iffy2' (Iffy2.java:23)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getCollectionArray())' in Type 'Iffy2' (Iffy2.java:52) advised by before advice from 'Iffy2' (Iffy2.java:35)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getCollectionArray())' in Type 'Iffy2' (Iffy2.java:52) advised by before advice from 'Iffy2' (Iffy2.java:31)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getCollectionArray())' in Type 'Iffy2' (Iffy2.java:52) advised by before advice from 'Iffy2' (Iffy2.java:27)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getCollectionArray())' in Type 'Iffy2' (Iffy2.java:52) advised by before advice from 'Iffy2' (Iffy2.java:23)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getCollectionArray())' in Type 'Iffy2' (Iffy2.java:52) advised by before advice from 'Iffy2' (Iffy2.java:10)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getIntegerCollectionArray())' in Type 'Iffy2' (Iffy2.java:56) advised by before advice from 'Iffy2' (Iffy2.java:43)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getIntegerCollectionArray())' in Type 'Iffy2' (Iffy2.java:56) advised by before advice from 'Iffy2' (Iffy2.java:27)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getIntegerCollectionArray())' in Type 'Iffy2' (Iffy2.java:56) advised by before advice from 'Iffy2' (Iffy2.java:23)"/>
+       <message kind="weave" text="method-execution(java.util.Collection[] Iffy2.getIntegerCollectionArray())' in Type 'Iffy2' (Iffy2.java:56) advised by before advice from 'Iffy2' (Iffy2.java:10)"/>
+
      </compile>
    </ajc-test>