Buggy code:
public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo , boolean valueRequired ) { } public TypeBinding checkFieldAccess ( BlockScope scope ) { } public void checkNPE ( BlockScope scope , FlowContext flowContext , FlowInfo flowInfo , boolean checkString ) { } public void computeConversion ( Scope scope , TypeBinding runtimeTimeType , TypeBinding compileTimeType ) { } public void generateAssignment ( BlockScope currentScope , CodeStream codeStream , Assignment assignment , boolean valueRequired ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } public void generateCompoundAssignment ( BlockScope currentScope , CodeStream codeStream , Expression expression , int operator , int assignmentImplicitConversion , boolean valueRequired ) { } public void generatePostIncrement ( BlockScope currentScope , CodeStream codeStream , CompoundAssignment postIncrement , boolean valueRequired ) { } public FieldBinding generateReadSequence ( BlockScope currentScope , CodeStream codeStream ) { } public void generateReceiver ( CodeStream codeStream ) { } public TypeBinding [ ] genericTypeArguments ( ) { } protected FieldBinding getCodegenBinding ( int index ) { } protected TypeBinding getGenericCast ( int index ) { } public TypeBinding getOtherFieldBindings ( BlockScope scope ) { int length = this . tokens . length ; FieldBinding field ; if ( ( ( this . bits ) & ( Binding . FIELD ) ) != 0 ) { field = ( ( FieldBinding ) ( this . binding ) ) ; if ( ! ( field . isStatic ( ) ) ) { if ( ( ( this . indexOfFirstFieldBinding ) > 1 ) || ( scope . methodScope ( ) . isStatic ) ) { scope . problemReporter ( ) . staticFieldAccessToNonStaticVariable ( this , field ) ; return null ; } } else { if ( ( ( ( this . indexOfFirstFieldBinding ) > 1 ) && ( ( field . declaringClass ) != ( this . actualReceiverType ) ) ) && ( field . declaringClass . canBeSeenBy ( scope ) ) ) { scope . problemReporter ( ) . indirectAccessToStaticField ( this , field ) ; } } if ( isFieldUseDeprecated ( field , scope , ( ( ( ( this . bits ) & ( ASTNode . IsStrictlyAssigned ) ) != 0 ) && ( ( this . indexOfFirstFieldBinding ) == length ) ) ) ) scope . problemReporter ( ) . deprecatedField ( field , this ) ; } else { field = null ; } TypeBinding type = ( ( VariableBinding ) ( this . binding ) ) . type ; int index = this . indexOfFirstFieldBinding ; if ( index == length ) { this . constant = ( ( FieldBinding ) ( this . binding ) ) . constant ( ) ; return ( type != null ) && ( ( ( this . bits ) & ( ASTNode . IsStrictlyAssigned ) ) == 0 ) ? type . capture ( scope , this . sourceEnd ) : type ; } int otherBindingsLength = length - index ; this . otherCodegenBindings = this . otherBindings = new FieldBinding [ otherBindingsLength ] ; this . otherDepths = new int [ otherBindingsLength ] ; this . constant = ( ( VariableBinding ) ( this . binding ) ) . constant ( ) ; int firstDepth = ( ( this . bits ) & ( ASTNode . DepthMASK ) ) > > ( ASTNode . DepthSHIFT ) ; while ( index < length ) { char [ ] token = this . tokens [ index ] ; if ( type == null ) return null ; this . bits &= ~ ( ASTNode . DepthMASK ) ; FieldBinding previousField = field ; field = scope . getField ( type . capture ( scope , ( ( int ) ( this . sourcePositions [ index ] ) ) ) , token , this ) ; int place = index - ( this . indexOfFirstFieldBinding ) ; this . otherBindings [ place ] = field ; this . otherDepths [ place ] = ( ( this . bits ) & ( ASTNode . DepthMASK ) ) > > ( ASTNode . DepthSHIFT ) ; if ( field . isValidBinding ( ) ) { if ( previousField != null ) { TypeBinding fieldReceiverType = type ; TypeBinding receiverErasure = type . erasure ( ) ; if ( receiverErasure instanceof ReferenceBinding ) { <START_BUG> if ( ( receiverErasure . findSuperTypeWithSameErasure ( field . declaringClass ) ) == null ) { <END_BUG> fieldReceiverType = field . declaringClass ; } } FieldBinding originalBinding = previousField . original ( ) ; if ( ( ( ( originalBinding . type . tagBits ) & ( TagBits . HasTypeVariable ) ) != 0 ) && ( ( fieldReceiverType . id ) != ( TypeIds . T_JavaLangObject ) ) ) { setGenericCast ( ( index - 1 ) , originalBinding . type . genericCast ( fieldReceiverType ) ) ; } } if ( isFieldUseDeprecated ( field , scope , ( ( ( ( this . bits ) & ( ASTNode . IsStrictlyAssigned ) ) != 0 ) && ( ( index + 1 ) == length ) ) ) ) { scope . problemReporter ( ) . deprecatedField ( field , this ) ; } if ( ( this . constant ) != ( Constant . NotAConstant ) ) { this . constant = field . constant ( ) ; } if ( field . isStatic ( ) ) { scope . problemReporter ( ) . nonStaticAccessToStaticField ( this , field , index ) ; if ( ( field . declaringClass ) != type ) { scope . problemReporter ( ) . indirectAccessToStaticField ( this , field ) ; } } type = field . type ; index ++ ; } else { this . constant = Constant . NotAConstant ; scope . problemReporter ( ) . invalidField ( this , field , index , type ) ; setDepth ( firstDepth ) ; return null ; } }

Fix:
if ( ( receiverErasure . findSuperTypeOriginatingFrom ( field . declaringClass ) ) == null ) {