Buggy code:
public class MethodBinding extends Binding { public int modifiers ; public char [ ] selector ; public TypeBinding returnType ; public TypeBinding [ ] parameters ; public ReferenceBinding [ ] thrownExceptions ; public ReferenceBinding declaringClass ; public TypeVariableBinding [ ] typeVariables = Binding . NO_TYPE_VARIABLES ; char [ ] signature ; public long tagBits ; protected MethodBinding ( ) { } public MethodBinding ( int modifiers , char [ ] selector , TypeBinding returnType , TypeBinding [ ] parameters , ReferenceBinding [ ] thrownExceptions , ReferenceBinding declaringClass ) { } public MethodBinding ( int modifiers , TypeBinding [ ] parameters , ReferenceBinding [ ] thrownExceptions , ReferenceBinding declaringClass ) { } public MethodBinding ( MethodBinding initialMethodBinding , ReferenceBinding declaringClass ) { } public final boolean areParameterErasuresEqual ( MethodBinding method ) { } public final boolean areParametersCompatibleWith ( TypeBinding [ ] arguments ) { } public final boolean areParametersEqual ( MethodBinding method ) { } public final boolean areTypeVariableErasuresEqual ( MethodBinding method ) { } public final boolean canBeSeenBy ( InvocationSite invocationSite , Scope scope ) { } public final boolean canBeSeenBy ( PackageBinding invocationPackage ) { } public final boolean canBeSeenBy ( TypeBinding receiverType , InvocationSite invocationSite , Scope scope ) { } public List collectMissingTypes ( List missingTypes ) { if ( ( ( this . tagBits ) & ( TagBits . HasMissingType ) ) != 0 ) { missingTypes = this . returnType . collectMissingTypes ( missingTypes ) ; for ( int i = 0 , max = this . parameters . length ; i < max ; i ++ ) { missingTypes = this . parameters [ i ] . collectMissingTypes ( missingTypes ) ; } for ( int i = 0 , max = this . thrownExceptions . length ; i < max ; i ++ ) { missingTypes = this . thrownExceptions [ i ] . collectMissingTypes ( missingTypes ) ; } for ( int i = 0 , max = this . typeVariables . length ; i < max ; i ++ ) { TypeVariableBinding variable = this . typeVariables [ i ] ; missingTypes = variable . superclass ( ) . collectMissingTypes ( missingTypes ) ; ReferenceBinding [ ] interfaces = variable . superInterfaces ( ) ; for ( int j = 0 , length = interfaces . length ; j < length ; j ++ ) { <START_BUG> missingTypes = interfaces [ i ] . collectMissingTypes ( missingTypes ) ; <END_BUG> } } } return missingTypes ; } MethodBinding computeSubstitutedMethod ( MethodBinding method , LookupEnvironment env ) { } public char [ ] computeUniqueKey ( boolean isLeaf ) { } public final char [ ] constantPoolName ( ) { } public char [ ] genericSignature ( ) { } public final int getAccessFlags ( ) { } public AnnotationBinding [ ] getAnnotations ( ) { } public long getAnnotationTagBits ( ) { } public Object getDefaultValue ( ) { } public AnnotationBinding [ ] [ ] getParameterAnnotations ( ) { } public TypeVariableBinding getTypeVariable ( char [ ] variableName ) { } public boolean hasSubstitutedParameters ( ) { } public boolean hasSubstitutedReturnType ( ) { } public final boolean isAbstract ( ) { } public final boolean isBridge ( ) { } public final boolean isConstructor ( ) { } public final boolean isDefault ( ) { } public final boolean isDefaultAbstract ( ) { } public final boolean isDeprecated ( ) { } public final boolean isFinal ( ) { } public final boolean isImplementing ( ) { } public final boolean isMain ( ) { } public final boolean isNative ( ) { } public final boolean isOverriding ( ) { } public final boolean isPrivate ( ) { } public final boolean isProtected ( ) { } public final boolean isPublic ( ) { } public final boolean isStatic ( ) { } public final boolean isStrictfp ( ) { } public final boolean isSynchronized ( ) { } public final boolean isSynthetic ( ) { } public final boolean isUsed ( ) { } public final boolean isVarargs ( ) { } public final boolean isViewedAsDeprecated ( ) { } public final int kind ( ) { } public MethodBinding original ( ) { } public char [ ] readableName ( ) { } public void setAnnotations ( AnnotationBinding [ ] annotations ) { } public void setAnnotations ( AnnotationBinding [ ] annotations , AnnotationBinding [ ] [ ] parameterAnnotations , Object defaultValue ) { } public void setDefaultValue ( Object defaultValue ) { } public void setParameterAnnotations ( AnnotationBinding [ ] [ ] parameterAnnotations ) { } protected final void setSelector ( char [ ] selector ) { } public char [ ] shortReadableName ( ) { } public final char [ ] signature ( ) { } public final char [ ] signature ( ClassFile classFile ) { } public final int sourceEnd ( ) { } public AbstractMethodDeclaration sourceMethod ( ) { } public final int sourceStart ( ) { } public MethodBinding tiebreakMethod ( ) { } public String toString ( ) { } public TypeVariableBinding [ ] typeVariables ( ) { } }

Fix:
missingTypes = interfaces [ j ] . collectMissingTypes ( missingTypes ) ;