Buggy code:
public abstract class Scope implements BaseTypes , BindingIds , CompilerModifiers , ProblemReasons , TagBits , TypeConstants , TypeIds { public static final int BLOCK_SCOPE = 1 ; public static final int CLASS_SCOPE = 3 ; public static final int COMPILATION_UNIT_SCOPE = 4 ; public static final int METHOD_SCOPE = 2 ; public static int compareTypes ( TypeBinding left , TypeBinding right ) { } public static ReferenceBinding [ ] substitute ( Substitution substitution , ReferenceBinding [ ] originalTypes ) { } public static TypeBinding [ ] substitute ( Substitution substitution , TypeBinding [ ] originalTypes ) { } public int kind ; public Scope parent ; protected Scope ( int kind , Scope parent ) { } public int boxing ( int id ) { } public TypeBinding boxing ( TypeBinding type ) { } public final ClassScope classScope ( ) { } public int compareUncheckedException ( ReferenceBinding type ) { } public final CompilationUnitScope compilationUnitScope ( ) { } protected final MethodBinding computeCompatibleMethod ( MethodBinding method , TypeBinding [ ] arguments , InvocationSite invocationSite ) { } protected boolean connectTypeVariables ( TypeParameter [ ] typeParameters ) { boolean noProblems = true ; if ( ( typeParameters == null ) || ( ( environment ( ) . options . sourceLevel ) < ( ClassFileConstants . JDK1_5 ) ) ) return true ; nextVariable : for ( int i = 0 , paramLength = typeParameters . length ; i < paramLength ; i ++ ) { TypeParameter typeParameter = typeParameters [ i ] ; TypeVariableBinding typeVariable = typeParameter . binding ; if ( typeVariable == null ) return false ; typeVariable . superclass = getJavaLangObject ( ) ; typeVariable . superInterfaces = NoSuperInterfaces ; typeVariable . firstBound = null ; TypeReference typeRef = typeParameter . type ; if ( typeRef == null ) continue nextVariable ; ReferenceBinding superType = ( ( this . kind ) == ( Scope . METHOD_SCOPE ) ) ? ( ( ReferenceBinding ) ( typeRef . resolveType ( ( ( BlockScope ) ( this ) ) ) ) ) : ( ( ReferenceBinding ) ( typeRef . resolveType ( ( ( ClassScope ) ( this ) ) ) ) ) ; if ( superType == null ) { typeVariable . tagBits |= TagBits . HierarchyHasProblems ; noProblems = false ; continue nextVariable ; } if ( superType . isTypeVariable ( ) ) { TypeVariableBinding varSuperType = ( ( TypeVariableBinding ) ( superType ) ) ; <START_BUG> if ( ( varSuperType . rank ) >= ( typeVariable . rank ) ) { <END_BUG> problemReporter ( ) . forwardTypeVariableReference ( typeParameter , varSuperType ) ; typeVariable . tagBits |= TagBits . HierarchyHasProblems ; noProblems = false ; continue nextVariable ; } } if ( superType . isFinal ( ) ) problemReporter ( ) . finalVariableBound ( typeVariable , typeRef ) ; typeRef . resolvedType = superType ; if ( superType . isClass ( ) ) { typeVariable . superclass = superType ; } else { typeVariable . superInterfaces = new ReferenceBinding [ ] { superType } ; typeVariable . modifiers |= AccInterface ; } typeVariable . firstBound = superType ; TypeReference [ ] boundRefs = typeParameter . bounds ; if ( boundRefs != null ) { for ( int j = 0 , k = boundRefs . length ; j < k ; j ++ ) { typeRef = boundRefs [ j ] ; superType = ( ( this . kind ) == ( Scope . METHOD_SCOPE ) ) ? ( ( ReferenceBinding ) ( typeRef . resolveType ( ( ( BlockScope ) ( this ) ) ) ) ) : ( ( ReferenceBinding ) ( typeRef . resolveType ( ( ( ClassScope ) ( this ) ) ) ) ) ; if ( superType == null ) { typeVariable . tagBits |= TagBits . HierarchyHasProblems ; noProblems = false ; continue nextVariable ; } typeRef . resolvedType = superType ; if ( superType . isClass ( ) ) { problemReporter ( ) . boundsMustBeAnInterface ( typeRef , superType ) ; typeVariable . tagBits |= TagBits . HierarchyHasProblems ; noProblems = false ; continue nextVariable ; } int size = typeVariable . superInterfaces . length ; System . arraycopy ( typeVariable . superInterfaces , 0 , ( typeVariable . superInterfaces = new ReferenceBinding [ size + 1 ] ) , 0 , size ) ; typeVariable . superInterfaces [ size ] = superType ; } } } return noProblems ; } public TypeBinding convertToRawType ( TypeBinding type ) { } public ArrayBinding createArrayType ( TypeBinding type , int dimension ) { } public ParameterizedTypeBinding createParameterizedType ( ReferenceBinding genericType , TypeBinding [ ] arguments , ReferenceBinding enclosingType ) { } public TypeVariableBinding [ ] createTypeVariables ( TypeParameter [ ] typeParameters , Binding declaringElement ) { } public boolean detectCycle ( ReferenceBinding superType ) { } public final ClassScope enclosingClassScope ( ) { } public final MethodScope enclosingMethodScope ( ) { } public final SourceTypeBinding enclosingSourceType ( ) { } public final LookupEnvironment environment ( ) { } public MethodBinding findDefaultAbstractMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite , ReferenceBinding classHierarchyStart , MethodBinding matchingMethod , ObjectVector found ) { } public ReferenceBinding findDirectMemberType ( char [ ] typeName , ReferenceBinding enclosingType ) { } public MethodBinding findExactMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public FieldBinding findField ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite , boolean needResolve ) { } public ReferenceBinding findMemberType ( char [ ] typeName , ReferenceBinding enclosingType ) { } public MethodBinding findMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public MethodBinding findMethodForArray ( ArrayBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { }

Fix:
if ( ( ( varSuperType . rank ) >= ( typeVariable . rank ) ) && ( ( varSuperType . declaringElement ) == ( typeVariable . declaringElement ) ) ) {