Program: 88620
Project: 88620
Buggy source:
/** 
 * Handling for assert stmts - extra fields and methods are needed in the Jimple 
 */
private void handleAssert(polyglot.ast.ClassBody cBody){
  AssertStmtChecker asc=new AssertStmtChecker();
  cBody.visit(asc);
  if (!asc.isHasAssert())   return;
  if (!sootClass.declaresField("String_Node_Str",soot.BooleanType.v())) {
    sootClass.addField(new soot.SootField("String_Node_Str",soot.BooleanType.v(),soot.Modifier.STATIC | soot.Modifier.FINAL));
  }
  if (!sootClass.declaresField("String_Node_Str" + sootClass.getName(),soot.RefType.v("String_Node_Str"))) {
    sootClass.addField(new soot.SootField("String_Node_Str" + sootClass.getName(),soot.RefType.v("String_Node_Str"),soot.Modifier.STATIC));
  }
  String methodName="String_Node_Str";
  soot.Type methodRetType=soot.RefType.v("String_Node_Str");
  ArrayList paramTypes=new ArrayList();
  paramTypes.add(soot.RefType.v("String_Node_Str"));
  if (!sootClass.declaresMethod(methodName,paramTypes,methodRetType)) {
    soot.SootMethod sootMethod=new soot.SootMethod(methodName,paramTypes,methodRetType,soot.Modifier.STATIC);
    AssertClassMethodSource mSrc=new AssertClassMethodSource();
    sootMethod.setSource(mSrc);
    sootClass.addMethod(sootMethod);
  }
  methodName="String_Node_Str";
  methodRetType=soot.VoidType.v();
  paramTypes=new ArrayList();
  if (!sootClass.declaresMethod(methodName,paramTypes,methodRetType)) {
    soot.SootMethod sootMethod=new soot.SootMethod(methodName,paramTypes,methodRetType,soot.Modifier.STATIC);
    PolyglotMethodSource mSrc=new PolyglotMethodSource();
    mSrc.hasAssert(true);
    sootMethod.setSource(mSrc);
    sootClass.addMethod(sootMethod);
  }
 else {
    ((soot.javaToJimple.PolyglotMethodSource)sootClass.getMethod(methodName,paramTypes,methodRetType).getSource()).hasAssert(true);
  }
}

Fixed version (ground truth):
/** 
 * Handling for assert stmts - extra fields and methods are needed in the Jimple 
 */
private void handleAssert(polyglot.ast.ClassBody cBody){
  AssertStmtChecker asc=new AssertStmtChecker();
  cBody.visit(asc);
  if (!asc.isHasAssert())   return;
  if (!sootClass.declaresField("String_Node_Str",soot.BooleanType.v())) {
    sootClass.addField(new soot.SootField("String_Node_Str",soot.BooleanType.v(),soot.Modifier.STATIC | soot.Modifier.FINAL));
  }
  soot.SootClass addClassToClass=sootClass;
  while ((innerClassInfoMap != null) && (innerClassInfoMap.containsKey(addClassToClass))) {
    addClassToClass=((InnerClassInfo)innerClassInfoMap.get(addClassToClass)).getOuterClass();
  }
  if (!addClassToClass.declaresField("String_Node_Str" + addClassToClass.getName(),soot.RefType.v("String_Node_Str"))) {
    addClassToClass.addField(new soot.SootField("String_Node_Str" + addClassToClass.getName(),soot.RefType.v("String_Node_Str"),soot.Modifier.STATIC));
  }
  String methodName="String_Node_Str";
  soot.Type methodRetType=soot.RefType.v("String_Node_Str");
  ArrayList paramTypes=new ArrayList();
  paramTypes.add(soot.RefType.v("String_Node_Str"));
  if (!addClassToClass.declaresMethod(methodName,paramTypes,methodRetType)) {
    soot.SootMethod sootMethod=new soot.SootMethod(methodName,paramTypes,methodRetType,soot.Modifier.STATIC);
    AssertClassMethodSource mSrc=new AssertClassMethodSource();
    sootMethod.setSource(mSrc);
    addClassToClass.addMethod(sootMethod);
  }
  methodName="String_Node_Str";
  methodRetType=soot.VoidType.v();
  paramTypes=new ArrayList();
  if (!sootClass.declaresMethod(methodName,paramTypes,methodRetType)) {
    soot.SootMethod sootMethod=new soot.SootMethod(methodName,paramTypes,methodRetType,soot.Modifier.STATIC);
    PolyglotMethodSource mSrc=new PolyglotMethodSource();
    mSrc.hasAssert(true);
    sootMethod.setSource(mSrc);
    sootClass.addMethod(sootMethod);
  }
 else {
    ((soot.javaToJimple.PolyglotMethodSource)sootClass.getMethod(methodName,paramTypes,methodRetType).getSource()).hasAssert(true);
  }
}