Buggy code:
public class JavadocMessageSend extends MessageSend { public int tagSourceStart ; public int tagSourceEnd ; public boolean superAccess = false ; public JavadocMessageSend ( char [ ] name , long pos ) { } public JavadocMessageSend ( char [ ] name , long pos , JavadocArgumentExpression [ ] arguments ) { } private TypeBinding internalResolveType ( Scope scope ) { this . constant = NotAConstant ; if ( ( this . receiver ) == null ) { this . receiverType = scope . enclosingSourceType ( ) ; } else if ( ( scope . kind ) == ( Scope . CLASS_SCOPE ) ) { this . receiverType = this . receiver . resolveType ( ( ( ClassScope ) ( scope ) ) ) ; } else { this . receiverType = this . receiver . resolveType ( ( ( BlockScope ) ( scope ) ) ) ; } TypeBinding [ ] argumentTypes = NoParameters ; if ( ( this . arguments ) != null ) { boolean argHasError = false ; int length = this . arguments . length ; argumentTypes = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { Expression argument = this . arguments [ i ] ; if ( ( scope . kind ) == ( Scope . CLASS_SCOPE ) ) { argumentTypes [ i ] = argument . resolveType ( ( ( ClassScope ) ( scope ) ) ) ; } else { argumentTypes [ i ] = argument . resolveType ( ( ( BlockScope ) ( scope ) ) ) ; } if ( ( argumentTypes [ i ] ) == null ) { argHasError = true ; } } if ( argHasError ) { return null ; } } if ( ( this . receiverType ) == null ) { return null ; } this . qualifyingType = this . receiverType ; this . superAccess = scope . enclosingSourceType ( ) . isCompatibleWith ( this . receiverType ) ; if ( this . receiverType . isBaseType ( ) ) { scope . problemReporter ( ) . javadocErrorNoMethodFor ( this , this . receiverType , argumentTypes , scope . getDeclarationModifiers ( ) ) ; return null ; } this . binding = ( ( ( this . receiver ) != null ) && ( this . receiver . isThis ( ) ) ) ? scope . getImplicitMethod ( this . selector , argumentTypes , this ) : scope . getMethod ( this . receiverType , this . selector , argumentTypes , this ) ; if ( ! ( this . binding . isValidBinding ( ) ) ) { switch ( this . binding . problemId ( ) ) { case ProblemReasons . NonStaticReferenceInConstructorInvocation : case ProblemReasons . NonStaticReferenceInStaticContext : case ProblemReasons . InheritedNameHidesEnclosingName : MethodBinding closestMatch = ( ( ProblemMethodBinding ) ( this . binding ) ) . closestMatch ; if ( closestMatch != null ) { this . binding = closestMatch ; } } } if ( ! ( this . binding . isValidBinding ( ) ) ) { if ( ( this . binding . declaringClass ) == null ) { if ( ( this . receiverType ) instanceof ReferenceBinding ) { this . binding . declaringClass = ( ( ReferenceBinding ) ( this . receiverType ) ) ; } else { scope . problemReporter ( ) . javadocErrorNoMethodFor ( this , this . receiverType , argumentTypes , scope . getDeclarationModifiers ( ) ) ; return null ; } } scope . problemReporter ( ) . javadocInvalidMethod ( this , this . binding , scope . getDeclarationModifiers ( ) ) ; if ( ( this . binding ) instanceof ProblemMethodBinding ) { MethodBinding closestMatch = ( ( ProblemMethodBinding ) ( this . binding ) ) . closestMatch ; if ( closestMatch != null ) <START_BUG> this . codegenBinding = this . binding = closestMatch ; <END_BUG> } return this . resolvedType = ( ( this . binding ) == null ) ? null : this . binding . returnType ; } if ( isMethodUseDeprecated ( this . binding , scope ) ) { scope . problemReporter ( ) . javadocDeprecatedMethod ( this . binding , this , scope . getDeclarationModifiers ( ) ) ; } return this . resolvedType = this . binding . returnType ; } public boolean isSuperAccess ( ) { } public StringBuffer printExpression ( int indent , StringBuffer output ) { } public TypeBinding resolveType ( BlockScope scope ) { } public TypeBinding resolveType ( ClassScope scope ) { } public void traverse ( ASTVisitor visitor , BlockScope blockScope ) { } }

Fix:
this . binding = closestMatch ;