Buggy code:
public class ReferencePointcut extends Pointcut { public TypeX onType ; public TypePattern onTypeSymbolic ; public String name ; public TypePatternList arguments ; public ReferencePointcut ( TypePattern onTypeSymbolic , String name , TypePatternList arguments ) { } public ReferencePointcut ( TypeX onType , String name , TypePatternList arguments ) { } public FuzzyBoolean fastMatch ( ResolvedTypeX type ) { } public FuzzyBoolean match ( Shadow shadow ) { } public String toString ( ) { } public void write ( DataOutputStream s ) throws IOException { } public static Pointcut read ( DataInputStream s , ISourceContext context ) throws IOException { } public void resolveBindings ( IScope scope , Bindings bindings ) { } public void postRead ( ResolvedTypeX enclosingType ) { } public Test findResidue ( Shadow shadow , ExposedState state ) { } private boolean concretizing = false ; public Pointcut concretize1 ( ResolvedTypeX searchStart , IntMap bindings ) { if ( concretizing ) { searchStart . getWorld ( ) . getMessageHandler ( ) . handleMessage ( MessageUtil . error ( ( "circular<seq2seq4repair_space>pointcut<seq2seq4repair_space>declaration<seq2seq4repair_space>involving:<seq2seq4repair_space>" + ( this ) ) , getSourceLocation ( ) ) ) ; return Pointcut . makeMatchesNothing ( CONCRETE ) ; } try { concretizing = true ; ResolvedPointcutDefinition pointcutDec ; if ( ( onType ) != null ) { searchStart = onType . resolve ( searchStart . getWorld ( ) ) ; if ( searchStart == ( ResolvedTypeX . MISSING ) ) { return Pointcut . makeMatchesNothing ( CONCRETE ) ; } } pointcutDec = searchStart . findPointcut ( name ) ; if ( pointcutDec == null ) { searchStart . getWorld ( ) . getMessageHandler ( ) . handleMessage ( MessageUtil . error ( ( ( ( "can\'t<seq2seq4repair_space>find<seq2seq4repair_space>pointcut<seq2seq4repair_space>\'" + ( name ) ) + "\'<seq2seq4repair_space>on<seq2seq4repair_space>" ) + ( searchStart . getName ( ) ) ) , getSourceLocation ( ) ) ) ; return Pointcut . makeMatchesNothing ( CONCRETE ) ; } if ( pointcutDec . isAbstract ( ) ) { searchStart . getWorld ( ) . showMessage ( ERROR , ( pointcutDec + "<seq2seq4repair_space>is<seq2seq4repair_space>abstract" ) , getSourceLocation ( ) , bindings . getEnclosingAdvice ( ) . getSourceLocation ( ) ) ; return Pointcut . makeMatchesNothing ( CONCRETE ) ; } ResolvedTypeX [ ] parameterTypes = searchStart . getWorld ( ) . resolve ( pointcutDec . getParameterTypes ( ) ) ; <START_BUG> arguments = arguments . resolveReferences ( bindings ) ; <END_BUG> IntMap newBindings = new IntMap ( ) ; for ( int i = 0 , len = arguments . size ( ) ; i < len ; i ++ ) { TypePattern p = arguments . get ( i ) ; if ( ( ! ( p . matchesSubtypes ( parameterTypes [ i ] ) ) ) && ( ! ( p . getExactType ( ) . equals ( OBJECT ) ) ) ) { throw new BCException ( ( "illegal<seq2seq4repair_space>change<seq2seq4repair_space>to<seq2seq4repair_space>pointcut<seq2seq4repair_space>declaration:<seq2seq4repair_space>" + ( this ) ) ) ; } if ( p instanceof BindingTypePattern ) { newBindings . put ( i , ( ( BindingTypePattern ) ( p ) ) . getFormalIndex ( ) ) ; } } newBindings . copyContext ( bindings ) ; newBindings . pushEnclosingDefinition ( pointcutDec ) ; try { return pointcutDec . getPointcut ( ) . concretize1 ( searchStart , newBindings ) ; } finally { newBindings . popEnclosingDefinitition ( ) ; } } finally { concretizing = false ; } } public boolean equals ( Object other ) { } public int hashCode ( ) { } }

Fix:
TypePatternList arguments = this . arguments . resolveReferences ( bindings ) ;