Buggy code:
public class SourceTypeBinding extends ReferenceBinding { public ReferenceBinding superclass ; public ReferenceBinding [ ] superInterfaces ; private FieldBinding [ ] fields ; private MethodBinding [ ] methods ; public ReferenceBinding [ ] memberTypes ; public TypeVariableBinding [ ] typeVariables ; public ClassScope scope ; public static final int METHOD_EMUL = 0 ; public static final int FIELD_EMUL = 1 ; public static final int CLASS_LITERAL_EMUL = 2 ; public static final int RECEIVER_TYPE_EMUL = 3 ; HashMap [ ] synthetics ; char [ ] genericReferenceTypeSignature ; private SimpleLookupTable storedAnnotations = null ; public SourceTypeBinding ( char [ ] [ ] compoundName , PackageBinding fPackage , ClassScope scope ) { } private void addDefaultAbstractMethods ( ) { } public FieldBinding addSyntheticFieldForInnerclass ( LocalVariableBinding actualOuterLocalVariable ) { } public FieldBinding addSyntheticFieldForInnerclass ( ReferenceBinding enclosingType ) { } public FieldBinding addSyntheticFieldForClassLiteral ( TypeBinding targetType , BlockScope blockScope ) { } public FieldBinding addSyntheticFieldForAssert ( BlockScope blockScope ) { } public FieldBinding addSyntheticFieldForEnumValues ( ) { } public SyntheticMethodBinding addSyntheticMethod ( FieldBinding targetField , boolean isReadAccess ) { } public SyntheticMethodBinding addSyntheticEnumMethod ( char [ ] selector ) { } public SyntheticFieldBinding addSyntheticFieldForSwitchEnum ( char [ ] fieldName , String key ) { } public SyntheticMethodBinding addSyntheticMethodForSwitchEnum ( TypeBinding enumBinding ) { } public SyntheticMethodBinding addSyntheticMethod ( MethodBinding targetMethod , boolean isSuperAccess ) { } public SyntheticMethodBinding addSyntheticBridgeMethod ( MethodBinding inheritedMethodToBridge , MethodBinding targetMethod ) { } public int kind ( ) { } public char [ ] computeUniqueKey ( boolean isLeaf ) { } void faultInTypesForFieldsAndMethods ( ) { } public FieldBinding [ ] fields ( ) { } public char [ ] genericTypeSignature ( ) { } public char [ ] genericSignature ( ) { } public long getAnnotationTagBits ( ) { } public MethodBinding [ ] getDefaultAbstractMethods ( ) { } public MethodBinding getExactConstructor ( TypeBinding [ ] argumentTypes ) { } public MethodBinding getExactMethod ( char [ ] selector , TypeBinding [ ] argumentTypes , CompilationUnitScope refScope ) { } public FieldBinding getField ( char [ ] fieldName , boolean needResolve ) { } public MethodBinding [ ] getMethods ( char [ ] selector ) { } public FieldBinding getSyntheticField ( LocalVariableBinding actualOuterLocalVariable ) { } public FieldBinding getSyntheticField ( ReferenceBinding targetEnclosingType , boolean onlyExactMatch ) { } public SyntheticMethodBinding getSyntheticBridgeMethod ( MethodBinding inheritedMethodToBridge ) { } public void initializeDeprecatedAnnotationTagBits ( ) { } public boolean isEquivalentTo ( TypeBinding otherType ) { if ( ( this ) == otherType ) return true ; if ( otherType == null ) return false ; switch ( otherType . kind ( ) ) { case Binding . WILDCARD_TYPE : return ( ( WildcardBinding ) ( otherType ) ) . boundCheck ( this ) ; case Binding . PARAMETERIZED_TYPE : if ( ( ( ( otherType . tagBits ) & ( TagBits . HasDirectWildcard ) ) == 0 ) && ( ( ! ( this . isMemberType ( ) ) ) || ( ! ( otherType . isMemberType ( ) ) ) ) ) return false ; ParameterizedTypeBinding otherParamType = ( ( ParameterizedTypeBinding ) ( otherType ) ) ; <START_BUG> if ( ( this ) != ( otherParamType . type ( ) ) ) <END_BUG> return false ; if ( ! ( isStatic ( ) ) ) { ReferenceBinding enclosing = enclosingType ( ) ; if ( enclosing != null ) { ReferenceBinding otherEnclosing = otherParamType . enclosingType ( ) ; if ( otherEnclosing == null ) return false ; if ( ( ( otherEnclosing . tagBits ) & ( TagBits . HasDirectWildcard ) ) == 0 ) { if ( enclosing != otherEnclosing ) return false ; } else { if ( ! ( enclosing . isEquivalentTo ( otherParamType . enclosingType ( ) ) ) ) return false ; } } } int length = ( ( this . typeVariables ) == null ) ? 0 : this . typeVariables . length ; TypeBinding [ ] otherArguments = otherParamType . arguments ; int otherLength = ( otherArguments == null ) ? 0 : otherArguments . length ; if ( otherLength != length ) return false ; for ( int i = 0 ; i < length ; i ++ ) if ( ! ( this . typeVariables [ i ] . isTypeArgumentContainedBy ( otherArguments [ i ] ) ) ) return false ; return true ; case Binding . RAW_TYPE : return ( otherType . erasure ( ) ) == ( this ) ; } return false ; } public boolean isGenericType ( ) { } public ReferenceBinding [ ] memberTypes ( ) { } public FieldBinding getUpdatedFieldBinding ( FieldBinding targetField , ReferenceBinding newDeclaringClass ) { } public MethodBinding getUpdatedMethodBinding ( MethodBinding targetMethod , ReferenceBinding newDeclaringClass ) { } public boolean hasMemberTypes ( ) { } public MethodBinding [ ] methods ( ) { } private FieldBinding resolveTypeFor ( FieldBinding field ) { } private MethodBinding resolveTypesFor ( MethodBinding method ) { } AnnotationHolder retrieveAnnotationHolder ( Binding binding , boolean forceInitialization ) { } public void setFields ( FieldBinding [ ] fields ) { } public void setMethods ( MethodBinding [ ] methods ) { } public final int sourceEnd ( ) { } public final int sourceStart ( ) { } SimpleLookupTable storedAnnotations ( boolean forceInitialize ) { } public ReferenceBinding superclass ( ) { } public ReferenceBinding [ ] superInterfaces ( ) { } public SyntheticMethodBinding [ ] syntheticMethods ( ) { } public FieldBinding [ ] syntheticFields ( ) { } public String toString ( ) { } public TypeVariableBinding [ ] typeVariables ( ) { } void verifyMethods ( MethodVerifier verifier ) { } }

Fix:
if ( ( this ) != ( otherParamType . genericType ( ) ) )