Buggy code:
public abstract class ResolvedType extends UnresolvedType implements AnnotatedElement { private static final ResolvedType [ ] EMPTY_RESOLVED_TYPE_ARRAY = new ResolvedType [ 0 ] ; public static final String PARAMETERIZED_TYPE_IDENTIFIER = "P" ; private ResolvedType [ ] resolvedTypeParams ; protected World world ; protected ResolvedType ( String signature , World world ) { } protected ResolvedType ( String signature , String signatureErasure , World world ) { } public final Iterator getDirectSupertypes ( ) { } public abstract ResolvedMember [ ] getDeclaredFields ( ) { } public abstract ResolvedMember [ ] getDeclaredMethods ( ) { } public abstract ResolvedType [ ] getDeclaredInterfaces ( ) { } public abstract ResolvedMember [ ] getDeclaredPointcuts ( ) { } public abstract ResolvedType getSuperclass ( ) { } public abstract int getModifiers ( ) { } public boolean isMissing ( ) { } public ResolvedType [ ] getAnnotationTypes ( ) { } public final UnresolvedType getSuperclass ( World world ) { } static Set validBoxing = new HashSet ( ) ; public ResolvedType getResolvedComponentType ( ) { } public World getWorld ( ) { } public final boolean equals ( Object other ) { } public Iterator getFields ( ) { } public Iterator getMethods ( ) { } public List getMethodsWithoutIterator ( boolean includeITDs , boolean allowMissing ) { } private void addAndRecurse ( Set knowninterfaces , List collector , ResolvedType rtx , boolean includeITDs , boolean allowMissing ) { } public ResolvedType [ ] getResolvedTypeParameters ( ) { } public ResolvedMember lookupField ( Member m ) { } public ResolvedMember lookupMethod ( Member m ) { } public ResolvedMember lookupMethodInITDs ( Member m ) { } private ResolvedMember lookupMember ( Member m , Iterator i ) { } private ResolvedMember lookupMember ( Member m , ResolvedMember [ ] a ) { } public ResolvedMember lookupResolvedMember ( ResolvedMember aMember , boolean allowMissing ) { } public static boolean matches ( Member m1 , Member m2 ) { } public static boolean conflictingSignature ( Member m1 , Member m2 ) { } public Iterator getPointcuts ( ) { } public ResolvedPointcutDefinition findPointcut ( String name ) { } public CrosscuttingMembers crosscuttingMembers ; public CrosscuttingMembers collectCrosscuttingMembers ( ) { } public final Collection collectDeclares ( boolean includeAdviceLike ) { } private final Collection collectShadowMungers ( ) { } protected boolean doesNotExposeShadowMungers ( ) { } public PerClause getPerClause ( ) { } protected Collection getDeclares ( ) { } protected Collection getTypeMungers ( ) { } protected Collection getPrivilegedAccesses ( ) { } public final boolean isInterface ( ) { } public final boolean isAbstract ( ) { } public boolean isClass ( ) { } public boolean isAspect ( ) { } public boolean isAnnotationStyleAspect ( ) { } public boolean isEnum ( ) { } public boolean isAnnotation ( ) { } public boolean isAnonymous ( ) { } public void addAnnotation ( AnnotationX annotationX ) { } public AnnotationX [ ] getAnnotations ( ) { } public boolean canAnnotationTargetType ( ) { } public AnnotationTargetKind [ ] getAnnotationTargetKinds ( ) { } public boolean isAnnotationWithRuntimeRetention ( ) { } public boolean isSynthetic ( ) { } public final boolean isFinal ( ) { } protected Map getMemberParameterizationMap ( ) { } public Collection getDeclaredAdvice ( ) { List l = new ArrayList ( ) ; ResolvedMember [ ] methods = getDeclaredMethods ( ) ; if ( isParameterizedType ( ) ) methods = getGenericType ( ) . getDeclaredMethods ( ) ; Map typeVariableMap = getMemberParameterizationMap ( ) ; for ( int i = 0 , len = methods . length ; i < len ; i ++ ) { ShadowMunger munger = methods [ i ] . getAssociatedShadowMunger ( ) ; if ( munger != null ) { if ( this . isParameterizedType ( ) ) { <START_BUG> munger = munger . parameterizeWith ( typeVariableMap ) ; <END_BUG> if ( munger instanceof Advice ) { Advice advice = ( ( Advice ) ( munger ) ) ; UnresolvedType [ ] ptypes = methods [ i ] . getGenericParameterTypes ( ) ; UnresolvedType [ ] newPTypes = new UnresolvedType [ ptypes . length ] ; for ( int j = 0 ; j < ( ptypes . length ) ; j ++ ) { if ( ( ptypes [ j ] ) instanceof TypeVariableReferenceType ) { TypeVariableReferenceType tvrt = ( ( TypeVariableReferenceType ) ( ptypes [ j ] ) ) ; if ( typeVariableMap . containsKey ( tvrt . getTypeVariable ( ) . getName ( ) ) ) { newPTypes [ j ] = ( ( UnresolvedType ) ( typeVariableMap . get ( tvrt . getTypeVariable ( ) . getName ( ) ) ) ) ; } else { newPTypes [ j ] = ptypes [ j ] ; } } else { newPTypes [ j ] = ptypes [ j ] ; } } advice . setBindingParameterTypes ( newPTypes ) ; } } munger . setDeclaringType ( this ) ; l . add ( munger ) ; } } return l ; } public Collection getDeclaredShadowMungers ( ) { } public ResolvedMember [ ] getDeclaredJavaFields ( ) { } public ResolvedMember [ ] getDeclaredJavaMethods ( ) { } public ShadowMunger [ ] getDeclaredShadowMungersArray ( ) { } private ResolvedMember [ ] filterInJavaVisible ( ResolvedMember [ ] ms ) { } public abstract ISourceContext getSourceContext ( ) { } public static final ResolvedType [ ] NONE = new ResolvedType [ 0 ] ; public static final ResolvedType . Primitive BYTE = new ResolvedType . Primitive ( "B" , 1 , 0 ) ; public static final ResolvedType . Primitive CHAR = new ResolvedType . Primitive ( "C" , 1 , 1 ) ; public static final ResolvedType . Primitive DOUBLE = new ResolvedType . Primitive ( "D" , 2 , 2 ) ; public static final ResolvedType . Primitive FLOAT = new ResolvedType . Primitive ( "F" , 1 , 3 ) ;

Fix:
munger = munger . parameterizeWith ( this , typeVariableMap ) ;