Buggy code:
public boolean isBoundParameterizedType ( ) { } public boolean isCapture ( ) { } public boolean isClass ( ) { } public abstract boolean isCompatibleWith ( TypeBinding right ) { } public boolean isEnum ( ) { } public boolean isEquivalentTo ( TypeBinding otherType ) { } public boolean isGenericType ( ) { } public final boolean isHierarchyInconsistent ( ) { } public boolean isInterface ( ) { } public boolean isIntersectingWith ( TypeBinding otherType ) { } public boolean isIntersectionType ( ) { } public final boolean isLocalType ( ) { } public final boolean isMemberType ( ) { } public final boolean isNestedType ( ) { } public final boolean isNumericType ( ) { } public boolean isParameterizedType ( ) { } public boolean isParameterizedWithOwnVariables ( ) { } public boolean isProvablyDistinctFrom ( TypeBinding otherType , int depth ) { } public boolean isRawType ( ) { } public boolean isReifiable ( ) { } public boolean isThrowable ( ) { } public boolean isTypeArgumentContainedBy ( TypeBinding otherType ) { if ( ( this ) == otherType ) return true ; switch ( otherType . kind ( ) ) { case Binding . WILDCARD_TYPE : TypeBinding lowerBound = this ; TypeBinding upperBound = this ; switch ( this . kind ( ) ) { case Binding . WILDCARD_TYPE : WildcardBinding wildcard = ( ( WildcardBinding ) ( this ) ) ; switch ( wildcard . boundKind ) { case Wildcard . EXTENDS : if ( ( wildcard . otherBounds ) != null ) break ; upperBound = wildcard . bound ; lowerBound = null ; break ; case Wildcard . SUPER : upperBound = wildcard ; lowerBound = wildcard . bound ; break ; case Wildcard . UNBOUND : upperBound = wildcard ; lowerBound = null ; } break ; case Binding . TYPE_PARAMETER : if ( this . isCapture ( ) ) { CaptureBinding capture = ( ( CaptureBinding ) ( this ) ) ; if ( ( capture . lowerBound ) != null ) lowerBound = capture . lowerBound ; } } WildcardBinding otherWildcard = ( ( WildcardBinding ) ( otherType ) ) ; if ( ( otherWildcard . otherBounds ) != null ) return false ; TypeBinding otherBound = otherWildcard . bound ; switch ( otherWildcard . boundKind ) { case Wildcard . EXTENDS : if ( otherBound == ( this ) ) return true ; if ( upperBound == null ) return false ; TypeBinding match = upperBound . findSuperTypeWithSameErasure ( otherBound ) ; if ( ( match != null ) && ( ( match = match . leafComponentType ( ) ) . isRawType ( ) ) ) { return match == ( otherBound . leafComponentType ( ) ) ; } return upperBound . isCompatibleWith ( otherBound ) ; case Wildcard . SUPER : if ( otherBound == ( this ) ) return true ; if ( lowerBound == null ) return false ; match = otherBound . findSuperTypeWithSameErasure ( lowerBound ) ; if ( ( match != null ) && ( ( match = match . leafComponentType ( ) ) . isRawType ( ) ) ) { return match == ( lowerBound . leafComponentType ( ) ) ; } return otherBound . isCompatibleWith ( lowerBound ) ; case Wildcard . UNBOUND : default : return true ; } case Binding . PARAMETERIZED_TYPE : if ( ! ( this . isParameterizedType ( ) ) ) return false ; ParameterizedTypeBinding paramType = ( ( ParameterizedTypeBinding ) ( this ) ) ; ParameterizedTypeBinding otherParamType = ( ( ParameterizedTypeBinding ) ( otherType ) ) ; <START_BUG> if ( ( paramType . type ( ) ) != ( otherParamType . type ( ) ) ) <END_BUG> return false ; if ( ! ( paramType . 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 = ( ( paramType . arguments ) == null ) ? 0 : paramType . arguments . length ; TypeBinding [ ] otherArguments = otherParamType . arguments ; int otherLength = ( otherArguments == null ) ? 0 : otherArguments . length ; if ( otherLength != length ) return false ; nextArgument : for ( int i = 0 ; i < length ; i ++ ) { TypeBinding argument = paramType . arguments [ i ] ; TypeBinding otherArgument = otherArguments [ i ] ; if ( argument == otherArgument ) continue nextArgument ; int kind = argument . kind ( ) ; if ( ( otherArgument . kind ( ) ) != kind ) return false ; switch ( kind ) { case Binding . PARAMETERIZED_TYPE : if ( argument . isTypeArgumentContainedBy ( otherArgument ) ) continue nextArgument ; break ; case Binding . WILDCARD_TYPE : WildcardBinding wildcard = ( ( WildcardBinding ) ( argument ) ) ; otherWildcard = ( ( WildcardBinding ) ( otherArgument ) ) ; switch ( wildcard . boundKind ) { case Wildcard . EXTENDS : if ( ( ( otherWildcard . boundKind ) == ( Wildcard . UNBOUND ) ) && ( ( wildcard . bound ) == ( wildcard . typeVariable ( ) . upperBound ( ) ) ) ) continue nextArgument ; break ; case Wildcard . SUPER : break ; case Wildcard . UNBOUND : if ( ( ( otherWildcard . boundKind ) == ( Wildcard . EXTENDS ) ) && ( ( otherWildcard . bound ) == ( otherWildcard . typeVariable ( ) . upperBound ( ) ) ) ) continue nextArgument ; break ;

Fix:
if ( ( paramType . actualType ( ) ) != ( otherParamType . actualType ( ) ) )