Buggy code:
public class MessageSend extends Expression implements InvocationSite { public Expression receiver ; public char [ ] selector ; public Expression [ ] arguments ; public MethodBinding binding ; public MethodBinding codegenBinding ; public long nameSourcePosition ; MethodBinding syntheticAccessor ; public TypeBinding receiverType ; public TypeBinding qualifyingType ; public MessageSend ( ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } 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 ; this . qualifyingType = this . receiverType = receiver . resolveType ( scope ) ; boolean argsContainCast = false ; 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 ( ( receiverType ) instanceof ReferenceBinding ) { this . codegenBinding = this . binding = scope . findMethod ( ( ( ReferenceBinding ) ( receiverType ) ) , selector , new TypeBinding [ ] { } , this ) ; } return null ; } } if ( ( this . receiverType ) == null ) return null ; if ( this . receiverType . isBaseType ( ) ) { scope . problemReporter ( ) . errorNoMethodFor ( this , this . receiverType , argumentTypes ) ; return null ; } this . codegenBinding = this . binding = ( receiver . isImplicitThis ( ) ) ? scope . getImplicitMethod ( selector , argumentTypes , this ) : scope . getMethod ( this . receiverType , selector , argumentTypes , this ) ; if ( ! ( binding . isValidBinding ( ) ) ) { if ( ( binding . declaringClass ) == null ) { if ( ( this . receiverType ) instanceof ReferenceBinding ) { binding . declaringClass = ( ( ReferenceBinding ) ( this . receiverType ) ) ; } else { scope . problemReporter ( ) . errorNoMethodFor ( this , this . receiverType , argumentTypes ) ; return null ; } } scope . problemReporter ( ) . invalidMethod ( this , binding ) ; if ( ( binding ) instanceof ProblemMethodBinding ) { MethodBinding closestMatch = ( ( ProblemMethodBinding ) ( binding ) ) . closestMatch ; if ( closestMatch != null ) this . codegenBinding = this . binding = closestMatch ; } <START_BUG> return ( binding ) == null ? null : binding . returnType ; <END_BUG> } if ( ! ( binding . isStatic ( ) ) ) { if ( ( ( receiver ) instanceof NameReference ) && ( ( ( ( ( NameReference ) ( receiver ) ) . bits ) & ( BindingIds . TYPE ) ) != 0 ) ) { scope . problemReporter ( ) . mustUseAStaticMethod ( this , binding ) ; } } else { if ( ! ( ( ( receiver . isImplicitThis ( ) ) || ( receiver . isSuper ( ) ) ) || ( ( ( receiver ) instanceof NameReference ) && ( ( ( ( ( NameReference ) ( receiver ) ) . bits ) & ( BindingIds . TYPE ) ) != 0 ) ) ) ) { scope . problemReporter ( ) . nonStaticAccessToStaticMethod ( this , binding ) ; } if ( ( ! ( receiver . isImplicitThis ( ) ) ) && ( ( binding . declaringClass ) != ( receiverType ) ) ) { scope . problemReporter ( ) . indirectAccessToStaticMethod ( this , binding ) ; } } if ( ( arguments ) != null ) { for ( int i = 0 ; i < ( arguments . length ) ; i ++ ) { arguments [ i ] . implicitWidening ( binding . parameters [ i ] , argumentTypes [ i ] ) ; } if ( argsContainCast ) { CastExpression . checkNeedForArgumentCasts ( scope , this . receiver , ( ( ReferenceBinding ) ( receiverType ) ) , binding , this . arguments , argumentTypes , this ) ; } } if ( binding . isAbstract ( ) ) { if ( receiver . isSuper ( ) ) { scope . problemReporter ( ) . cannotDireclyInvokeAbstractMethod ( this , binding ) ; } } if ( isMethodUseDeprecated ( binding , scope ) ) scope . problemReporter ( ) . deprecatedMethod ( binding , this ) ; return this . resolvedType = binding . returnType ; } public void setActualReceiverType ( ReferenceBinding receiverType ) { } public void setDepth ( int depth ) { } public void setFieldIndex ( int depth ) { } public void traverse ( IAbstractSyntaxTreeVisitor visitor , BlockScope blockScope ) { } }

Fix:
return this . resolvedType = ( ( binding ) == null ) ? null : binding . returnType ;