@@ -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(); | |||
} | |||
} |
@@ -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");} |
@@ -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"/> |
@@ -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); | |||