Browse Source

Improve Ajc165Tests.testFunkyPointcut_pr272233_2

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>
pull/220/head
Alexander Kriegisch 1 year ago
parent
commit
287ec8f5ef

+ 43
- 33
tests/bugs165/pr272233/Iffy2.java View 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;
}

}

+ 19
- 7
tests/src/test/resources/org/aspectj/systemtest/ajc165/ajc165.xml View File

@@ -78,14 +78,26 @@

<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>


Loading…
Cancel
Save