private boolean isCompatibleWith0(TypeBinding otherType) {
	if (otherType == this)
		return true;
	if (otherType.id == TypeIds.T_JavaLangObject)
		return true;
	// equivalence may allow compatibility with array type through wildcard
	// bound
	if (this.isEquivalentTo(otherType))
		return true;
	switch (otherType.kind()) {
		case Binding.TYPE :
			ReferenceBinding otherReferenceType = (ReferenceBinding) otherType;
			if(Arrays.equals(this.compoundName,otherReferenceType.compoundName) && Arrays.equals(this.fileName, otherReferenceType.fileName)) {
				return true;
			}


			if ( otherReferenceType.isSuperclassOf(this))
				return true;
			return (otherReferenceType.isAnonymousType()  && this.isSuperclassOf(otherReferenceType));
		case Binding.ARRAY_TYPE:
		   return this==((ArrayBinding)otherType).referenceBinding;
		default :
			return false;
	}
}