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 areParametersEqual ( MethodBinding method ) { } public final boolean areParametersCompatibleWith ( TypeBinding [ ] arguments ) { } public final int kind ( ) { } public final boolean canBeSeenBy ( PackageBinding invocationPackage ) { } public final boolean areTypeVariableErasuresEqual ( MethodBinding method ) { } public final boolean canBeSeenBy ( InvocationSite invocationSite , Scope scope ) { } public final boolean canBeSeenBy ( TypeBinding receiverType , InvocationSite invocationSite , Scope scope ) { } MethodBinding computeSubstitutedMethod ( MethodBinding method , LookupEnvironment env ) { } public char [ ] computeUniqueKey ( boolean isLeaf ) { char [ ] declaringKey = this . declaringClass . computeUniqueKey ( false ) ; int declaringLength = declaringKey . length ; int selectorLength = ( ( this . selector ) == ( TypeConstants . INIT ) ) ? 0 : this . selector . length ; char [ ] sig = genericSignature ( ) ; boolean isGeneric = sig != null ; if ( ! isGeneric ) sig = signature ( ) ; int signatureLength = sig . length ; <START_BUG> int thrownExceptionsLength = ( ( this . thrownExceptions ) == null ) ? 0 : this . thrownExceptions . length ; <END_BUG> int thrownExceptionsSignatureLength = 0 ; char [ ] [ ] thrownExceptionsSignatures = null ; boolean addThrownExceptions = ( thrownExceptionsLength > 0 ) && ( ( ! isGeneric ) || ( ( CharOperation . lastIndexOf ( '^' , sig ) ) < 0 ) ) ; if ( addThrownExceptions ) { thrownExceptionsSignatures = new char [ thrownExceptionsLength ] [ ] ; for ( int i = 0 ; i < thrownExceptionsLength ; i ++ ) { if ( ( this . thrownExceptions [ i ] ) != null ) { thrownExceptionsSignatures [ i ] = this . thrownExceptions [ i ] . signature ( ) ; thrownExceptionsSignatureLength += ( thrownExceptionsSignatures [ i ] . length ) + 1 ; } } } char [ ] uniqueKey = new char [ ( ( ( declaringLength + 1 ) + selectorLength ) + signatureLength ) + thrownExceptionsSignatureLength ] ; int index = 0 ; System . arraycopy ( declaringKey , 0 , uniqueKey , index , declaringLength ) ; index = declaringLength ; uniqueKey [ ( index ++ ) ] = '.' ; System . arraycopy ( this . selector , 0 , uniqueKey , index , selectorLength ) ; index += selectorLength ; System . arraycopy ( sig , 0 , uniqueKey , index , signatureLength ) ; if ( thrownExceptionsSignatureLength > 0 ) { index += signatureLength ; for ( int i = 0 ; i < thrownExceptionsLength ; i ++ ) { char [ ] thrownExceptionSignature = thrownExceptionsSignatures [ i ] ; if ( thrownExceptionSignature != null ) { uniqueKey [ ( index ++ ) ] = '|' ; int length = thrownExceptionSignature . length ; System . arraycopy ( thrownExceptionSignature , 0 , uniqueKey , index , length ) ; index += length ; } } } return uniqueKey ; } public TypeBinding constantPoolDeclaringClass ( ) { } public final char [ ] constantPoolName ( ) { } public char [ ] genericSignature ( ) { } public AnnotationBinding [ ] getAnnotations ( ) { } public AnnotationBinding [ ] getParameterAnnotations ( int index ) { } public final int getAccessFlags ( ) { } public long getAnnotationTagBits ( ) { } public Object getDefaultValue ( ) { } 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 isNative ( ) { } public final boolean isOverriding ( ) { } public final boolean isMain ( ) { } public final boolean isPrivate ( ) { } public final boolean isUsed ( ) { } 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 isVarargs ( ) { } public final boolean isViewedAsDeprecated ( ) { } 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 ) { } public char [ ] shortReadableName ( ) { } protected final void setSelector ( char [ ] selector ) { } public final char [ ] signature ( ) { }

Fix:
int thrownExceptionsLength = this . thrownExceptions . length ;