Program: 53413
Project: 53413
Buggy source:
public void testCastableDestinationTypes(){
  assertCastableDestinationTypes(classObject,classObject);
  assertCastableDestinationTypes(classString,classString,classObject);
  assertCastableDestinationTypes(classJso,classJso,classObject);
  assertCastableDestinationTypes(intfSerializable,intfSerializable,classObject);
  assertCastableDestinationTypes(intfCloneable,intfCloneable,classObject);
  assertCastableDestinationTypes(intfIBase,intfIBase,classObject);
  assertCastableDestinationTypes(intfI,intfI,intfIBase,classObject);
  assertCastableDestinationTypes(intfJ,intfJ,classJso,classObject);
  assertCastableDestinationTypes(intfK,intfK,classJso,classObject);
  assertCastableDestinationTypes(classBase,classBase,classObject);
  assertCastableDestinationTypes(classA,classA,classObject,classBase);
  assertCastableDestinationTypes(classB,classB,classObject,classBase,intfIBase,intfI);
  assertCastableDestinationTypes(classC,classC,classObject,intfIBase,intfI);
  assertCastableDestinationTypes(classBSub,classBSub,classObject,classBase,classB,intfIBase,intfI,intfL);
  assertCastableDestinationTypes(classJso1,classObject,classJso,intfJ);
  assertCastableDestinationTypes(classJso2,classObject,classJso,intfK);
  assertCastableDestinationTypes(arrayOfJso,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject);
  assertCastableDestinationTypes(arrayOfJso1,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject,arrayOfIntfJ);
  assertCastableDestinationTypes(arrayOfJso2,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject,arrayOfIntfK);
  assertCastableDestinationTypes(intfIterable,intfIterable,classObject);
  assertCastableDestinationTypes(intfCollection,intfCollection,intfIterable,classObject);
  assertCastableDestinationTypes(intfList,intfList,intfIterable,intfCollection,classObject);
  assertCastableDestinationTypes(classArrayList,classArrayList,intfList,classObject,intfIterable,intfCollection);
  assertCastableDestinationTypes(arrayOfB,arrayOfB,arrayOfBase,arrayOfObject,arrayOfIntfI,arrayOfIntfIBase,classObject,arrayOfObject,intfCloneable,intfSerializable);
  assertCastableDestinationTypes(arrayOfArrayOfB,arrayOfArrayOfB,arrayOfArrayOfBase,arrayOfArrayOfObject,arrayOfArrayOfIntfI,arrayOfArrayOfIntfIBase,classObject,arrayOfObject,intfCloneable,arrayOfIntfClonable,intfSerializable,arrayOfIntfSerializable);
  assertCastableDestinationTypes(arrayOfInt,arrayOfInt,classObject,intfCloneable,intfSerializable);
  intfCollection=createInterface("String_Node_Str");
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classArrayList,intfList,intfCollection,classObject),Lists.newArrayList(intfIterable.getName()));
  assertCastableDestinationTypes(intfCollection,intfCollection,classObject);
  assertCastableDestinationTypes(intfList,intfList,intfCollection,classObject);
  assertCastableDestinationTypes(classArrayList,classArrayList,intfList,classObject,intfCollection);
  classA=createClass("String_Node_Str",classObject,false,false);
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classA,classObject),Lists.newArrayList(classBase.getName()));
  assertCastableDestinationTypes(classA,classA,classObject);
  JClassType classASub=createClass("String_Node_Str",classA,false,false);
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classASub,classA,classObject),EMPTY_LIST);
  assertCastableDestinationTypes(classASub,classASub,classA,classObject);
}

Fixed version (ground truth):
public void testCastableDestinationTypes(){
  assertCastableDestinationTypes(classObject,classObject);
  assertCastableDestinationTypes(classString,classString,classObject);
  assertCastableDestinationTypes(classJso,classJso,classObject);
  assertCastableDestinationTypes(intfSerializable,intfSerializable,classObject);
  assertCastableDestinationTypes(intfCloneable,intfCloneable,classObject);
  assertCastableDestinationTypes(intfIBase,intfIBase,classObject);
  assertCastableDestinationTypes(intfI,intfI,intfIBase,classObject);
  assertCastableDestinationTypes(intfJ,intfJ,classObject);
  assertCastableDestinationTypes(intfK,intfK,classObject);
  assertCastableDestinationTypes(classBase,classBase,classObject);
  assertCastableDestinationTypes(classA,classA,classObject,classBase);
  assertCastableDestinationTypes(classB,classB,classObject,classBase,intfIBase,intfI);
  assertCastableDestinationTypes(classC,classC,classObject,intfIBase,intfI);
  assertCastableDestinationTypes(classBSub,classBSub,classObject,classBase,classB,intfIBase,intfI,intfL);
  assertCastableDestinationTypes(classJso1,classObject,classJso,intfJ);
  assertCastableDestinationTypes(classJso2,classObject,classJso,intfK);
  assertCastableDestinationTypes(arrayOfJso,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject);
  assertCastableDestinationTypes(arrayOfJso1,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject,arrayOfIntfJ);
  assertCastableDestinationTypes(arrayOfJso2,classObject,intfCloneable,intfSerializable,arrayOfJso,arrayOfObject,arrayOfIntfK);
  assertCastableDestinationTypes(intfIterable,intfIterable,classObject);
  assertCastableDestinationTypes(intfCollection,intfCollection,intfIterable,classObject);
  assertCastableDestinationTypes(intfList,intfList,intfIterable,intfCollection,classObject);
  assertCastableDestinationTypes(classArrayList,classArrayList,intfList,classObject,intfIterable,intfCollection);
  assertCastableDestinationTypes(arrayOfB,arrayOfB,arrayOfBase,arrayOfObject,arrayOfIntfI,arrayOfIntfIBase,classObject,arrayOfObject,intfCloneable,intfSerializable);
  assertCastableDestinationTypes(arrayOfArrayOfB,arrayOfArrayOfB,arrayOfArrayOfBase,arrayOfArrayOfObject,arrayOfArrayOfIntfI,arrayOfArrayOfIntfIBase,classObject,arrayOfObject,intfCloneable,arrayOfIntfClonable,intfSerializable,arrayOfIntfSerializable);
  assertCastableDestinationTypes(arrayOfInt,arrayOfInt,classObject,intfCloneable,intfSerializable);
  intfCollection=createInterface("String_Node_Str");
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classArrayList,intfList,intfCollection,classObject),Lists.newArrayList(intfIterable.getName()));
  assertCastableDestinationTypes(intfCollection,intfCollection,classObject);
  assertCastableDestinationTypes(intfList,intfList,intfCollection,classObject);
  assertCastableDestinationTypes(classArrayList,classArrayList,intfList,classObject,intfCollection);
  classA=createClass("String_Node_Str",classObject,false,false);
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classA,classObject),Lists.newArrayList(classBase.getName()));
  assertCastableDestinationTypes(classA,classA,classObject);
  JClassType classASub=createClass("String_Node_Str",classA,false,false);
  program.typeOracle.computeBeforeAST(StandardTypes.createFrom(program),program.getDeclaredTypes(),Sets.<JDeclaredType>newHashSet(classASub,classA,classObject),EMPTY_LIST);
  assertCastableDestinationTypes(classASub,classASub,classA,classObject);
}