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 boolean fastMatch ( JavaClass jc ) { } 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 ) { if ( ( onTypeSymbolic ) != null ) { onType = onTypeSymbolic . resolveExactType ( scope , bindings ) ; } ResolvedTypeX searchType ; if ( ( onType ) != null ) { searchType = scope . getWorld ( ) . resolve ( onType ) ; } else { searchType = scope . getEnclosingType ( ) ; } <START_BUG> arguments . resolveBindings ( scope , bindings , true ) ; <END_BUG> ResolvedPointcutDefinition pointcutDef = searchType . findPointcut ( name ) ; if ( ( onType ) == null ) { while ( true ) { TypeX declaringType = searchType . getDeclaringType ( ) ; if ( declaringType == null ) break ; searchType = declaringType . resolve ( scope . getWorld ( ) ) ; pointcutDef = searchType . findPointcut ( name ) ; if ( pointcutDef != null ) { onType = searchType ; break ; } } } if ( pointcutDef == null ) { scope . message ( ERROR , this , "can't<seq2seq4repair_space>find<seq2seq4repair_space>referenced<seq2seq4repair_space>pointcut" ) ; return ; } if ( Modifier . isAbstract ( pointcutDef . getModifiers ( ) ) ) { if ( ( onType ) != null ) { scope . message ( ERROR , this , "can't<seq2seq4repair_space>make<seq2seq4repair_space>static<seq2seq4repair_space>reference<seq2seq4repair_space>to<seq2seq4repair_space>abstract<seq2seq4repair_space>pointcut" ) ; return ; } else if ( ! ( searchType . isAbstract ( ) ) ) { scope . message ( ERROR , this , "can't<seq2seq4repair_space>use<seq2seq4repair_space>abstract<seq2seq4repair_space>pointcut<seq2seq4repair_space>in<seq2seq4repair_space>concrete<seq2seq4repair_space>context" ) ; return ; } } ResolvedTypeX [ ] parameterTypes = scope . getWorld ( ) . resolve ( pointcutDef . getParameterTypes ( ) ) ; if ( ( parameterTypes . length ) != ( arguments . size ( ) ) ) { scope . message ( ERROR , this , ( ( ( "incompatible<seq2seq4repair_space>number<seq2seq4repair_space>of<seq2seq4repair_space>arguments<seq2seq4repair_space>to<seq2seq4repair_space>pointcut,<seq2seq4repair_space>expected<seq2seq4repair_space>" + ( parameterTypes . length ) ) + "<seq2seq4repair_space>found<seq2seq4repair_space>" ) + ( arguments . size ( ) ) ) ) ; return ; } for ( int i = 0 , len = arguments . size ( ) ; i < len ; i ++ ) { TypePattern p = arguments . get ( i ) ; if ( ! ( p . matchesSubtypes ( parameterTypes [ i ] ) ) ) { scope . message ( ERROR , p , ( ( ( "incompatible<seq2seq4repair_space>type,<seq2seq4repair_space>expected<seq2seq4repair_space>" + ( parameterTypes [ i ] ) ) + "<seq2seq4repair_space>found<seq2seq4repair_space>" ) + p ) ) ; return ; } } } public void postRead ( ResolvedTypeX enclosingType ) { } public Test findResidue ( Shadow shadow , ExposedState state ) { } private boolean concretizing = false ; public Pointcut concretize1 ( ResolvedTypeX searchStart , IntMap bindings ) { } public boolean equals ( Object other ) { } public int hashCode ( ) { } }

Fix:
arguments . resolveBindings ( scope , bindings , true , true ) ;