Program: 9298
Project: 9298
Buggy source:
public final boolean isAssignableFrom(ResolvedType other){
  if (other.isPrimitiveType()) {
    if (!world.isInJava5Mode())     return false;
    if (ResolvedType.validBoxing.contains(this.getSignature() + other.getSignature()))     return true;
  }
  if (this == other)   return true;
  if ((this.isRawType() || this.isGenericType()) && other.isParameterizedType()) {
    if (isAssignableFrom((ResolvedType)other.getRawType()))     return true;
  }
  if (this.isRawType() && other.isGenericType()) {
    if (isAssignableFrom((ResolvedType)other.getRawType()))     return true;
  }
  if (this.isGenericType() && other.isRawType()) {
    if (isAssignableFrom((ResolvedType)other.getGenericType()))     return true;
  }
  if (this.isParameterizedType()) {
    if (((ReferenceType)this.getRawType()).isAssignableFrom(other)) {
      boolean wildcardsAllTheWay=true;
      ResolvedType[] myParameters=this.getResolvedTypeParameters();
      for (int i=0; i < myParameters.length; i++) {
        if (!myParameters[i].isGenericWildcard()) {
          wildcardsAllTheWay=false;
        }
 else         if (myParameters[i].isExtends() || myParameters[i].isSuper()) {
          wildcardsAllTheWay=false;
        }
      }
      if (wildcardsAllTheWay && !other.isParameterizedType())       return true;
      ResolvedType[] theirParameters=other.getResolvedTypeParameters();
      boolean parametersAssignable=true;
      if (myParameters.length == theirParameters.length) {
        for (int i=0; i < myParameters.length; i++) {
          if (myParameters[i] == theirParameters[i])           continue;
          if (!myParameters[i].isGenericWildcard()) {
            parametersAssignable=false;
            break;
          }
 else {
            BoundedReferenceType wildcardType=(BoundedReferenceType)myParameters[i];
            if (!wildcardType.alwaysMatches(theirParameters[i])) {
              parametersAssignable=false;
              break;
            }
          }
        }
      }
 else {
        parametersAssignable=false;
      }
      if (parametersAssignable)       return true;
    }
  }
  for (Iterator i=other.getDirectSupertypes(); i.hasNext(); ) {
    if (this.isAssignableFrom((ResolvedType)i.next()))     return true;
  }
  return false;
}

Fixed version (ground truth):
public final boolean isAssignableFrom(ResolvedType other){
  if (other.isPrimitiveType()) {
    if (!world.isInJava5Mode())     return false;
    if (ResolvedType.validBoxing.contains(this.getSignature() + other.getSignature()))     return true;
  }
  if (this == other)   return true;
  if ((this.isRawType() || this.isGenericType()) && other.isParameterizedType()) {
    if (isAssignableFrom((ResolvedType)other.getRawType()))     return true;
  }
  if (this.isRawType() && other.isGenericType()) {
    if (isAssignableFrom((ResolvedType)other.getRawType()))     return true;
  }
  if (this.isGenericType() && other.isRawType()) {
    if (isAssignableFrom((ResolvedType)other.getGenericType()))     return true;
  }
  if (this.isParameterizedType()) {
    if (((ReferenceType)this.getRawType()).isAssignableFrom(other)) {
      boolean wildcardsAllTheWay=true;
      ResolvedType[] myParameters=this.getResolvedTypeParameters();
      for (int i=0; i < myParameters.length; i++) {
        if (!myParameters[i].isGenericWildcard()) {
          wildcardsAllTheWay=false;
        }
 else         if (myParameters[i].isExtends() || myParameters[i].isSuper()) {
          wildcardsAllTheWay=false;
        }
      }
      if (wildcardsAllTheWay && !other.isParameterizedType())       return true;
      ResolvedType[] theirParameters=other.getResolvedTypeParameters();
      boolean parametersAssignable=true;
      if (myParameters.length == theirParameters.length) {
        for (int i=0; i < myParameters.length; i++) {
          if (myParameters[i] == theirParameters[i])           continue;
          if (!myParameters[i].isGenericWildcard()) {
            parametersAssignable=false;
            break;
          }
 else {
            BoundedReferenceType wildcardType=(BoundedReferenceType)myParameters[i];
            if (!wildcardType.alwaysMatches(theirParameters[i])) {
              parametersAssignable=false;
              break;
            }
          }
        }
      }
 else {
        parametersAssignable=false;
      }
      if (parametersAssignable)       return true;
    }
  }
  if (other.isTypeVariableReference()) {
    TypeVariableReferenceType otherType=(TypeVariableReferenceType)other;
    return this.isAssignableFrom(otherType.getUpperBound().resolve(world));
  }
  for (Iterator i=other.getDirectSupertypes(); i.hasNext(); ) {
    if (this.isAssignableFrom((ResolvedType)i.next()))     return true;
  }
  return false;
}