Buggy code:
public abstract class ReferenceBinding extends TypeBinding implements IDependent { public char [ ] [ ] compoundName ; public char [ ] sourceName ; public int modifiers ; public PackageBinding fPackage ; char [ ] fileName ; char [ ] constantPoolName ; char [ ] signature ; private SimpleLookupTable compatibleCache ; public static ReferenceBinding LUB_GENERIC = new ReferenceBinding ( ) { } ; private static final Comparator FIELD_COMPARATOR = new Comparator ( ) { public int compare ( Object o1 , Object o2 ) { } } ; private static final Comparator METHOD_COMPARATOR = new Comparator ( ) { public int compare ( Object o1 , Object o2 ) { } } ; public static FieldBinding binarySearch ( char [ ] name , FieldBinding [ ] sortedFields ) { } public static long binarySearch ( char [ ] selector , MethodBinding [ ] sortedMethods ) { } static int compare ( char [ ] str1 , char [ ] str2 , int len1 , int len2 ) { } public static void sortFields ( FieldBinding [ ] sortedFields , int left , int right ) { } public static void sortMethods ( MethodBinding [ ] sortedMethods , int left , int right ) { } public FieldBinding [ ] availableFields ( ) { } public MethodBinding [ ] availableMethods ( ) { } public boolean canBeInstantiated ( ) { } public final boolean canBeSeenBy ( PackageBinding invocationPackage ) { } public final boolean canBeSeenBy ( ReferenceBinding receiverType , ReferenceBinding invocationType ) { } public final boolean canBeSeenBy ( Scope scope ) { } public ReferenceBinding closestMatch ( ) { } public char [ ] computeGenericTypeSignature ( TypeVariableBinding [ ] typeVariables ) { } public void computeId ( ) { } public char [ ] computeUniqueKey ( boolean isLeaf ) { } public char [ ] constantPoolName ( ) { } public String debugName ( ) { } public final int depth ( ) { } public boolean detectAnnotationCycle ( ) { } public final ReferenceBinding enclosingTypeAt ( int relativeDepth ) { } public int enumConstantCount ( ) { } public int fieldCount ( ) { } public FieldBinding [ ] fields ( ) { } public final int getAccessFlags ( ) { } public AnnotationBinding [ ] getAnnotations ( ) { } public long getAnnotationTagBits ( ) { } public MethodBinding getExactConstructor ( TypeBinding [ ] argumentTypes ) { } public MethodBinding getExactMethod ( char [ ] selector , TypeBinding [ ] argumentTypes , CompilationUnitScope refScope ) { } public FieldBinding getField ( char [ ] fieldName , boolean needResolve ) { } public char [ ] getFileName ( ) { } public ReferenceBinding getMemberType ( char [ ] typeName ) { } public MethodBinding [ ] getMethods ( char [ ] selector ) { } public PackageBinding getPackage ( ) { } public TypeVariableBinding getTypeVariable ( char [ ] variableName ) { } public int hashCode ( ) { } public boolean hasIncompatibleSuperType ( ReferenceBinding otherType ) { } public boolean hasMemberTypes ( ) { } public final boolean hasRestrictedAccess ( ) { } public boolean implementsInterface ( ReferenceBinding anInterface , boolean searchHierarchy ) { if ( ( this ) == anInterface ) return true ; ReferenceBinding [ ] interfacesToVisit = null ; int nextPosition = 0 ; ReferenceBinding currentType = this ; do { ReferenceBinding [ ] itsInterfaces = currentType . superInterfaces ( ) ; <START_BUG> if ( ( ( itsInterfaces != null ) && ( itsInterfaces != ( Binding . NO_SUPERINTERFACES ) ) ) && ( itsInterfaces != null ) ) { <END_BUG> if ( interfacesToVisit == null ) { interfacesToVisit = itsInterfaces ; nextPosition = interfacesToVisit . length ; } else { int itsLength = itsInterfaces . length ; if ( ( nextPosition + itsLength ) >= ( interfacesToVisit . length ) ) System . arraycopy ( interfacesToVisit , 0 , ( interfacesToVisit = new ReferenceBinding [ ( nextPosition + itsLength ) + 5 ] ) , 0 , nextPosition ) ; nextInterface : for ( int a = 0 ; a < itsLength ; a ++ ) { ReferenceBinding next = itsInterfaces [ a ] ; for ( int b = 0 ; b < nextPosition ; b ++ ) if ( next == ( interfacesToVisit [ b ] ) ) continue nextInterface ; interfacesToVisit [ ( nextPosition ++ ) ] = next ; } } } } while ( searchHierarchy && ( ( currentType = currentType . superclass ( ) ) != null ) ) ; for ( int i = 0 ; i < nextPosition ; i ++ ) { currentType = interfacesToVisit [ i ] ; if ( currentType . isEquivalentTo ( anInterface ) ) return true ; ReferenceBinding [ ] itsInterfaces = currentType . superInterfaces ( ) ; if ( ( itsInterfaces != null ) && ( itsInterfaces != ( Binding . NO_SUPERINTERFACES ) ) ) { int itsLength = itsInterfaces . length ; if ( ( nextPosition + itsLength ) >= ( interfacesToVisit . length ) ) System . arraycopy ( interfacesToVisit , 0 , ( interfacesToVisit = new ReferenceBinding [ ( nextPosition + itsLength ) + 5 ] ) , 0 , nextPosition ) ; nextInterface : for ( int a = 0 ; a < itsLength ; a ++ ) { ReferenceBinding next = itsInterfaces [ a ] ; for ( int b = 0 ; b < nextPosition ; b ++ ) if ( next == ( interfacesToVisit [ b ] ) ) continue nextInterface ; interfacesToVisit [ ( nextPosition ++ ) ] = next ; } } } return false ; } boolean implementsMethod ( MethodBinding method ) { } public final boolean isAbstract ( ) { } public boolean isAnnotationType ( ) { } public final boolean isBinaryBinding ( ) { } public boolean isClass ( ) { } public boolean isCompatibleWith ( TypeBinding otherType ) { } private boolean isCompatibleWith0 ( TypeBinding otherType ) { } public final boolean isDefault ( ) { }

Fix:
if ( ( itsInterfaces != null ) && ( itsInterfaces != ( Binding . NO_SUPERINTERFACES ) ) ) {