Buggy code:
interfacesToVisit [ lastPosition ] = itsInterfaces ; } } else { allSuperclassesAreAbstract = false ; } } MethodBinding [ ] methods = superType . unResolvedMethods ( ) ; nextMethod : for ( int m = methods . length ; ( -- m ) >= 0 ; ) { MethodBinding inheritedMethod = methods [ m ] ; if ( ( ( inheritedMethod . isPrivate ( ) ) || ( inheritedMethod . isConstructor ( ) ) ) || ( inheritedMethod . isDefaultAbstract ( ) ) ) continue nextMethod ; MethodBinding [ ] existingMethods = ( ( MethodBinding [ ] ) ( this . inheritedMethods . get ( inheritedMethod . selector ) ) ) ; if ( existingMethods != null ) { for ( int i = 0 , length = existingMethods . length ; i < length ; i ++ ) { if ( ( ( existingMethods [ i ] . declaringClass ) != ( inheritedMethod . declaringClass ) ) && ( areMethodsEqual ( existingMethods [ i ] , inheritedMethod ) ) ) { if ( ( inheritedMethod . isDefault ( ) ) && ( inheritedMethod . isAbstract ( ) ) ) checkPackagePrivateAbstractMethod ( inheritedMethod ) ; continue nextMethod ; } } } MethodBinding [ ] nonVisible = ( ( MethodBinding [ ] ) ( nonVisibleDefaultMethods . get ( inheritedMethod . selector ) ) ) ; if ( nonVisible != null ) for ( int i = 0 , l = nonVisible . length ; i < l ; i ++ ) if ( areMethodsEqual ( nonVisible [ i ] , inheritedMethod ) ) continue nextMethod ; if ( ( ! ( inheritedMethod . isDefault ( ) ) ) || ( ( inheritedMethod . declaringClass . fPackage ) == ( type . fPackage ) ) ) { if ( existingMethods == null ) { existingMethods = new MethodBinding [ ] { inheritedMethod } ; } else { int length = existingMethods . length ; System . arraycopy ( existingMethods , 0 , ( existingMethods = new MethodBinding [ length + 1 ] ) , 0 , length ) ; existingMethods [ length ] = inheritedMethod ; } this . inheritedMethods . put ( inheritedMethod . selector , existingMethods ) ; } else { if ( nonVisible == null ) { nonVisible = new MethodBinding [ ] { inheritedMethod } ; } else { int length = nonVisible . length ; System . arraycopy ( nonVisible , 0 , ( nonVisible = new MethodBinding [ length + 1 ] ) , 0 , length ) ; nonVisible [ length ] = inheritedMethod ; } nonVisibleDefaultMethods . put ( inheritedMethod . selector , nonVisible ) ; if ( ( inheritedMethod . isAbstract ( ) ) && ( ! ( this . type . isAbstract ( ) ) ) ) problemReporter ( ) . abstractMethodCannotBeOverridden ( this . type , inheritedMethod ) ; MethodBinding [ ] current = ( ( MethodBinding [ ] ) ( this . currentMethods . get ( inheritedMethod . selector ) ) ) ; if ( current != null ) { foundMatch : for ( int i = 0 , length = current . length ; i < length ; i ++ ) { if ( areMethodsEqual ( current [ i ] , inheritedMethod ) ) { problemReporter ( ) . overridesPackageDefaultMethod ( current [ i ] , inheritedMethod ) ; break foundMatch ; } } } } } superType = superType . superclass ( ) ; } <START_BUG> org . eclipse . jdt . internal . core . util . SimpleSet interfacesSeen = new org . eclipse . jdt . internal . core . util . SimpleSet ( ( lastPosition * 2 ) ) ; <END_BUG> for ( int i = 0 ; i <= lastPosition ; i ++ ) { ReferenceBinding [ ] interfaces = interfacesToVisit [ i ] ; for ( int j = 0 , l = interfaces . length ; j < l ; j ++ ) { superType = interfaces [ j ] ; if ( ! ( interfacesSeen . includes ( superType ) ) ) { interfacesSeen . add ( superType ) ; if ( superType . isValidBinding ( ) ) { if ( ( itsInterfaces = superType . superInterfaces ( ) ) != ( Binding . NO_SUPERINTERFACES ) ) { if ( ( ++ lastPosition ) == ( interfacesToVisit . length ) ) System . arraycopy ( interfacesToVisit , 0 , ( interfacesToVisit = new ReferenceBinding [ lastPosition * 2 ] [ ] ) , 0 , lastPosition ) ; interfacesToVisit [ lastPosition ] = itsInterfaces ; } MethodBinding [ ] methods = superType . unResolvedMethods ( ) ; nextMethod : for ( int m = methods . length ; ( -- m ) >= 0 ; ) { MethodBinding inheritedMethod = methods [ m ] ; MethodBinding [ ] existingMethods = ( ( MethodBinding [ ] ) ( this . inheritedMethods . get ( inheritedMethod . selector ) ) ) ; if ( existingMethods == null ) { existingMethods = new MethodBinding [ ] { inheritedMethod } ; } else { int length = existingMethods . length ; for ( int e = 0 ; e < length ; e ++ ) if ( isInterfaceMethodImplemented ( inheritedMethod , existingMethods [ e ] , superType ) ) continue nextMethod ; System . arraycopy ( existingMethods , 0 , ( existingMethods = new MethodBinding [ length + 1 ] ) , 0 , length ) ; existingMethods [ length ] = inheritedMethod ; } this . inheritedMethods . put ( inheritedMethod . selector , existingMethods ) ; }

Fix:
SimpleSet interfacesSeen = new SimpleSet ( ( lastPosition * 2 ) ) ;