Buggy code:
public class ParameterizedTypeBinding extends ReferenceBinding implements Substitution { public ReferenceBinding type ; public TypeBinding [ ] arguments ; public LookupEnvironment environment ; public char [ ] genericTypeSignature ; public ReferenceBinding superclass ; public ReferenceBinding [ ] superInterfaces ; public FieldBinding [ ] fields ; public ReferenceBinding [ ] memberTypes ; public MethodBinding [ ] methods ; private ReferenceBinding enclosingType ; public ParameterizedTypeBinding ( ReferenceBinding type , TypeBinding [ ] arguments , ReferenceBinding enclosingType , LookupEnvironment environment ) { } public void boundCheck ( Scope scope , TypeReference [ ] argumentReferences ) { } public boolean canBeInstantiated ( ) { } public int kind ( ) { } public TypeBinding capture ( Scope scope , int position ) { } public void collectSubstitutes ( Scope scope , TypeBinding actualType , Map substitutes , int constraint ) { } public void computeId ( ) { } public char [ ] computeUniqueKey ( boolean isLeaf ) { } public char [ ] constantPoolName ( ) { } public ParameterizedMethodBinding createParameterizedMethod ( MethodBinding originalMethod ) { } public String debugName ( ) { } public ReferenceBinding enclosingType ( ) { } public LookupEnvironment environment ( ) { } public TypeBinding erasure ( ) { } public int fieldCount ( ) { } public FieldBinding [ ] fields ( ) { } public char [ ] genericTypeSignature ( ) { } 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 ReferenceBinding getMemberType ( char [ ] typeName ) { } public MethodBinding [ ] getMethods ( char [ ] selector ) { if ( ( this . methods ) != null ) { long range ; if ( ( range = ReferenceBinding . binarySearch ( selector , this . methods ) ) >= 0 ) { int start = ( ( int ) ( range ) ) ; int length = ( ( ( int ) ( range > > 32 ) ) - start ) + 1 ; MethodBinding [ ] result ; System . arraycopy ( this . methods , start , ( result = new MethodBinding [ length ] ) , 0 , length ) ; return result ; } } if ( ( ( tagBits ) & ( TagBits . AreMethodsComplete ) ) != 0 ) return Binding . NO_METHODS ; MethodBinding [ ] parameterizedMethods = null ; try { MethodBinding [ ] originalMethods = this . type . getMethods ( selector ) ; int length = originalMethods . length ; if ( length == 0 ) return Binding . NO_METHODS ; parameterizedMethods = new MethodBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) parameterizedMethods [ i ] = createParameterizedMethod ( originalMethods [ i ] ) ; if ( ( this . methods ) == null ) { MethodBinding [ ] temp = new MethodBinding [ length ] ; System . arraycopy ( parameterizedMethods , 0 , temp , 0 , length ) ; this . methods = temp ; } else { int total = length + ( this . methods . length ) ; MethodBinding [ ] temp = new MethodBinding [ total ] ; System . arraycopy ( parameterizedMethods , 0 , temp , 0 , length ) ; System . arraycopy ( this . methods , 0 , temp , length , this . methods . length ) ; if ( total > 1 ) <START_BUG> ReferenceBinding . sortMethods ( temp , 0 , ( total - 1 ) ) ; <END_BUG> this . methods = temp ; } return parameterizedMethods ; } finally { if ( parameterizedMethods == null ) this . methods = parameterizedMethods = Binding . NO_METHODS ; } } public boolean hasMemberTypes ( ) { } public boolean implementsMethod ( MethodBinding method ) { } void initialize ( ReferenceBinding someType , TypeBinding [ ] someArguments ) { } protected void initializeArguments ( ) { } public boolean isEquivalentTo ( TypeBinding otherType ) { } public boolean isIntersectingWith ( TypeBinding otherType ) { } public boolean isParameterizedType ( ) { } public boolean isRawSubstitution ( ) { } public ReferenceBinding [ ] memberTypes ( ) { } public MethodBinding [ ] methods ( ) { } public char [ ] qualifiedSourceName ( ) { } public char [ ] readableName ( ) { } ReferenceBinding resolve ( ) { } public char [ ] shortReadableName ( ) { } public char [ ] signature ( ) { } public char [ ] sourceName ( ) { } public TypeBinding substitute ( TypeVariableBinding originalVariable ) { } public ReferenceBinding superclass ( ) { } public ReferenceBinding [ ] superInterfaces ( ) { } public void swapUnresolved ( UnresolvedReferenceBinding unresolvedType , ReferenceBinding resolvedType , LookupEnvironment env ) { } public ReferenceBinding [ ] syntheticEnclosingInstanceTypes ( ) { } public SyntheticArgumentBinding [ ] syntheticOuterLocalVariables ( ) { } public char [ ] qualifiedPackageName ( ) { } public String toString ( ) { } public TypeVariableBinding [ ] typeVariables ( ) { } }

Fix:
ReferenceBinding . sortMethods ( temp , 0 , total ) ;