Buggy code:
public class MessageSend extends Expression implements InvocationSite { public Expression receiver ; public char [ ] selector ; public Expression [ ] arguments ; public MethodBinding binding ; protected MethodBinding codegenBinding ; MethodBinding syntheticAccessor ; public TypeBinding expectedType ; public long nameSourcePosition ; public TypeBinding actualReceiverType ; public TypeBinding genericCast ; public TypeReference [ ] typeArguments ; public TypeBinding [ ] genericTypeArguments ; public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void computeConversion ( Scope scope , TypeBinding runtimeTimeType , TypeBinding compileTimeType ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } public TypeBinding [ ] genericTypeArguments ( ) { } public boolean isSuperAccess ( ) { } public boolean isTypeAccess ( ) { } public void manageSyntheticAccessIfNecessary ( BlockScope currentScope , FlowInfo flowInfo ) { } public StringBuffer printExpression ( int indent , StringBuffer output ) { } public TypeBinding resolveType ( BlockScope scope ) { constant = NotAConstant ; boolean receiverCast = false ; boolean argsContainCast = false ; if ( ( this . receiver ) instanceof CastExpression ) { this . receiver . bits |= IgnoreNeedForCastCheckMASK ; receiverCast = true ; } this . actualReceiverType = receiver . resolveType ( scope ) ; if ( receiverCast && ( ( this . actualReceiverType ) != null ) ) { if ( ( ( ( CastExpression ) ( this . receiver ) ) . expression . resolvedType ) == ( this . actualReceiverType ) ) { scope . problemReporter ( ) . unnecessaryCast ( ( ( CastExpression ) ( this . receiver ) ) ) ; } } if ( ( this . typeArguments ) != null ) { int length = this . typeArguments . length ; boolean argHasError = false ; this . genericTypeArguments = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { <START_BUG> if ( ( this . genericTypeArguments [ i ] = this . typeArguments [ i ] . resolveType ( scope ) ) == null ) { <END_BUG> argHasError = true ; } } if ( argHasError ) { return null ; } } TypeBinding [ ] argumentTypes = NoParameters ; if ( ( arguments ) != null ) { boolean argHasError = false ; int length = arguments . length ; argumentTypes = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { Expression argument = arguments [ i ] ; if ( argument instanceof CastExpression ) { argument . bits |= IgnoreNeedForCastCheckMASK ; argsContainCast = true ; } if ( ( argumentTypes [ i ] = argument . resolveType ( scope ) ) == null ) { argHasError = true ; } } if ( argHasError ) { if ( ( actualReceiverType ) instanceof ReferenceBinding ) { this . binding = scope . findMethod ( ( ( ReferenceBinding ) ( actualReceiverType ) ) , selector , new TypeBinding [ ] { } , this ) ; } return null ; } } if ( ( this . actualReceiverType ) == null ) { return null ; } if ( this . actualReceiverType . isBaseType ( ) ) { scope . problemReporter ( ) . errorNoMethodFor ( this , this . actualReceiverType , argumentTypes ) ; return null ; } this . binding = ( receiver . isImplicitThis ( ) ) ? scope . getImplicitMethod ( selector , argumentTypes , this ) : scope . getMethod ( this . actualReceiverType , selector , argumentTypes , this ) ; if ( ! ( binding . isValidBinding ( ) ) ) { if ( ( binding . declaringClass ) == null ) { if ( ( this . actualReceiverType ) instanceof ReferenceBinding ) { binding . declaringClass = ( ( ReferenceBinding ) ( this . actualReceiverType ) ) ; } else { scope . problemReporter ( ) . errorNoMethodFor ( this , this . actualReceiverType , argumentTypes ) ; return null ; } } scope . problemReporter ( ) . invalidMethod ( this , binding ) ; MethodBinding closestMatch = ( ( ProblemMethodBinding ) ( binding ) ) . closestMatch ; switch ( this . binding . problemId ( ) ) { case ProblemReasons . Ambiguous : case ProblemReasons . NotVisible : case ProblemReasons . NonStaticReferenceInConstructorInvocation : case ProblemReasons . NonStaticReferenceInStaticContext : case ProblemReasons . ReceiverTypeNotVisible : case ProblemReasons . ParameterBoundMismatch : if ( closestMatch != null ) this . resolvedType = closestMatch . returnType ; default : } if ( closestMatch != null ) { this . binding = closestMatch ; if ( ( closestMatch . isPrivate ( ) ) && ( ! ( scope . isDefinedInMethod ( closestMatch ) ) ) ) { closestMatch . original ( ) . modifiers |= AccPrivateUsed ; } } return this . resolvedType ; } if ( ! ( binding . isStatic ( ) ) ) { if ( ( ( receiver ) instanceof NameReference ) && ( ( ( ( ( NameReference ) ( receiver ) ) . bits ) & ( Binding . TYPE ) ) != 0 ) ) { scope . problemReporter ( ) . mustUseAStaticMethod ( this , binding ) ; } else { TypeBinding expectedReceiverType = ( this . actualReceiverType . erasure ( ) . isCompatibleWith ( this . binding . declaringClass . erasure ( ) ) ) ? this . actualReceiverType : this . binding . declaringClass ; receiver . computeConversion ( scope , expectedReceiverType , actualReceiverType ) ; if ( expectedReceiverType != ( this . actualReceiverType ) ) this . actualReceiverType = expectedReceiverType ; } }

Fix:
if ( ( this . genericTypeArguments [ i ] = this . typeArguments [ i ] . resolveType ( scope , true ) ) == null ) {