Ver código fonte

test and fix for 129704: broken @annotation for methods in generic types

tags/V1_5_2rc1
aclement 18 anos atrás
pai
commit
3ca976f0ce

+ 19
- 0
tests/bugs152/pr129704/A.java Ver arquivo

@@ -0,0 +1,19 @@
import java.lang.annotation.*;

interface GDO {}

@Retention(RetentionPolicy.RUNTIME) @interface Marker { }

class DCP<T extends GDO> {
@Marker void getData(){}
}

aspect X {
before(Marker a): execution(* getData(..)) && @annotation(a) { System.err.println(a); }
}

public class A {
public static void main(String[] args) {
new DCP().getData();
}
}

+ 1
- 0
tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java Ver arquivo

@@ -17,6 +17,7 @@ import org.aspectj.testing.XMLBasedAjcTestCase;

public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void testAnnotationsAndGenericsBCException_pr129704() { runTest("annotations and generics leading to BCException");}
public void testMethodTooBigAfterWeaving_pr138384() { runTest("method too big"); }
public void testNotAtWithincode_pr138158_1() { runTest("not at withincode - 1");}
public void testNotAtWithincode_pr138158_2() { runTest("not at withincode - 2");}

+ 9
- 0
tests/src/org/aspectj/systemtest/ajc152/ajc152.xml Ver arquivo

@@ -15,6 +15,15 @@
</run>
</ajc-test>
<ajc-test dir="bugs152/pr129704" title="annotations and generics leading to BCException">
<compile files="A.java" options="-1.5"/>
<run class="A">
<stderr>
<line text="@Marker()"/>
</stderr>
</run>
</ajc-test>
<ajc-test dir="bugs152/pr136258" title="stack overflow">
<compile files="StatisticsTypeImpl.java" options="-1.5"/>
<run class="StatisticsTypeImpl"/>

+ 4
- 3
weaver/src/org/aspectj/weaver/bcel/BcelShadow.java Ver arquivo

@@ -1559,8 +1559,9 @@ public class BcelShadow extends Shadow {
ResolvedType[] annotations = null;
Member relevantMember = getSignature();
ResolvedType relevantType = relevantMember.getDeclaringType().resolve(world);
if (getKind() == Shadow.StaticInitialization) {
if (relevantType.isRawType() || relevantType.isParameterizedType()) relevantType = relevantType.getGenericType();

if (getKind() == Shadow.StaticInitialization) {
annotations = relevantType.resolve(world).getAnnotationTypes();
} else if (getKind() == Shadow.MethodCall || getKind() == Shadow.ConstructorCall) {
@@ -1596,7 +1597,7 @@ public class BcelShadow extends Shadow {
//ResolvedMember rm[] = relevantType.getDeclaredMethods();
Member foundMember = findMethod2(relevantType.getDeclaredMethods(),getSignature());
annotations = getAnnotations(foundMember, relevantMember,relevantType);
annotations = getAnnotations(foundMember, relevantMember, relevantType);
relevantMember = foundMember;
relevantMember = getRelevantMember(foundMember, relevantMember,relevantType);

Carregando…
Cancelar
Salvar