Program: 88571
Project: 88571
Buggy source:
public void addAssertInits(soot.Body body){
  soot.SootClass assertStatusClass=body.getMethod().getDeclaringClass();
  HashMap innerMap=soot.javaToJimple.InitialResolver.v().getInnerClassInfoMap();
  while ((innerMap != null) && (innerMap.containsKey(assertStatusClass))) {
    assertStatusClass=((InnerClassInfo)innerMap.get(assertStatusClass)).getOuterClass();
  }
  soot.SootFieldRef field=soot.Scene.v().makeFieldRef(assertStatusClass,"String_Node_Str" + assertStatusClass.getName(),soot.RefType.v("String_Node_Str"),true);
  soot.Local fieldLocal=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.RefType.v("String_Node_Str"));
  body.getLocals().add(fieldLocal);
  soot.jimple.FieldRef fieldRef=soot.jimple.Jimple.v().newStaticFieldRef(field);
  soot.jimple.AssignStmt fieldAssignStmt=soot.jimple.Jimple.v().newAssignStmt(fieldLocal,fieldRef);
  body.getUnits().add(fieldAssignStmt);
  soot.jimple.ConditionExpr cond=soot.jimple.Jimple.v().newNeExpr(fieldLocal,soot.jimple.NullConstant.v());
  soot.jimple.NopStmt nop1=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.IfStmt ifStmt=soot.jimple.Jimple.v().newIfStmt(cond,nop1);
  body.getUnits().add(ifStmt);
  soot.Local invokeLocal=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.RefType.v("String_Node_Str"));
  body.getLocals().add(invokeLocal);
  ArrayList paramTypes=new ArrayList();
  paramTypes.add(soot.RefType.v("String_Node_Str"));
  soot.SootMethodRef methodToInvoke=soot.Scene.v().makeMethodRef(assertStatusClass,"String_Node_Str",paramTypes,soot.RefType.v("String_Node_Str"),true);
  ArrayList params=new ArrayList();
  params.add(soot.jimple.StringConstant.v(assertStatusClass.getName()));
  soot.jimple.StaticInvokeExpr invoke=soot.jimple.Jimple.v().newStaticInvokeExpr(methodToInvoke,params);
  soot.jimple.AssignStmt invokeAssign=soot.jimple.Jimple.v().newAssignStmt(invokeLocal,invoke);
  body.getUnits().add(invokeAssign);
  soot.jimple.AssignStmt fieldRefAssign=soot.jimple.Jimple.v().newAssignStmt(fieldRef,invokeLocal);
  body.getUnits().add(fieldRefAssign);
  soot.jimple.NopStmt nop2=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.GotoStmt goto1=soot.jimple.Jimple.v().newGotoStmt(nop2);
  body.getUnits().add(goto1);
  body.getUnits().add(nop1);
  soot.jimple.AssignStmt fieldRefAssign2=soot.jimple.Jimple.v().newAssignStmt(invokeLocal,fieldRef);
  body.getUnits().add(fieldRefAssign2);
  body.getUnits().add(nop2);
  soot.Local boolLocal1=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.BooleanType.v());
  body.getLocals().add(boolLocal1);
  soot.Local boolLocal2=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.BooleanType.v());
  body.getLocals().add(boolLocal2);
  soot.SootMethodRef vMethodToInvoke=Scene.v().makeMethodRef(soot.Scene.v().getSootClass("String_Node_Str"),"String_Node_Str",new ArrayList(),soot.BooleanType.v(),false);
  soot.jimple.VirtualInvokeExpr vInvoke=soot.jimple.Jimple.v().newVirtualInvokeExpr(invokeLocal,vMethodToInvoke,new ArrayList());
  soot.jimple.AssignStmt testAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal1,vInvoke);
  body.getUnits().add(testAssign);
  soot.jimple.ConditionExpr cond2=soot.jimple.Jimple.v().newNeExpr(boolLocal1,soot.jimple.IntConstant.v(0));
  soot.jimple.NopStmt nop3=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.IfStmt ifStmt2=soot.jimple.Jimple.v().newIfStmt(cond2,nop3);
  body.getUnits().add(ifStmt2);
  soot.jimple.AssignStmt altAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal2,soot.jimple.IntConstant.v(1));
  body.getUnits().add(altAssign);
  soot.jimple.NopStmt nop4=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.GotoStmt goto2=soot.jimple.Jimple.v().newGotoStmt(nop4);
  body.getUnits().add(goto2);
  body.getUnits().add(nop3);
  soot.jimple.AssignStmt conAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal2,soot.jimple.IntConstant.v(0));
  body.getUnits().add(conAssign);
  body.getUnits().add(nop4);
  soot.SootFieldRef fieldD=Scene.v().makeFieldRef(body.getMethod().getDeclaringClass(),"String_Node_Str",soot.BooleanType.v(),true);
  soot.jimple.FieldRef fieldRefD=soot.jimple.Jimple.v().newStaticFieldRef(fieldD);
  soot.jimple.AssignStmt fAssign=soot.jimple.Jimple.v().newAssignStmt(fieldRefD,boolLocal2);
  body.getUnits().add(fAssign);
}

Fixed version (ground truth):
public void addAssertInits(soot.Body body){
  soot.SootClass assertStatusClass=body.getMethod().getDeclaringClass();
  HashMap innerMap=soot.javaToJimple.InitialResolver.v().getInnerClassInfoMap();
  while ((innerMap != null) && (innerMap.containsKey(assertStatusClass))) {
    assertStatusClass=((InnerClassInfo)innerMap.get(assertStatusClass)).getOuterClass();
  }
  soot.SootFieldRef field=soot.Scene.v().makeFieldRef(assertStatusClass,"String_Node_Str" + soot.util.StringTools.replaceAll(assertStatusClass.getName(),"String_Node_Str","String_Node_Str"),soot.RefType.v("String_Node_Str"),true);
  soot.Local fieldLocal=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.RefType.v("String_Node_Str"));
  body.getLocals().add(fieldLocal);
  soot.jimple.FieldRef fieldRef=soot.jimple.Jimple.v().newStaticFieldRef(field);
  soot.jimple.AssignStmt fieldAssignStmt=soot.jimple.Jimple.v().newAssignStmt(fieldLocal,fieldRef);
  body.getUnits().add(fieldAssignStmt);
  soot.jimple.ConditionExpr cond=soot.jimple.Jimple.v().newNeExpr(fieldLocal,soot.jimple.NullConstant.v());
  soot.jimple.NopStmt nop1=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.IfStmt ifStmt=soot.jimple.Jimple.v().newIfStmt(cond,nop1);
  body.getUnits().add(ifStmt);
  soot.Local invokeLocal=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.RefType.v("String_Node_Str"));
  body.getLocals().add(invokeLocal);
  ArrayList paramTypes=new ArrayList();
  paramTypes.add(soot.RefType.v("String_Node_Str"));
  soot.SootMethodRef methodToInvoke=soot.Scene.v().makeMethodRef(assertStatusClass,"String_Node_Str",paramTypes,soot.RefType.v("String_Node_Str"),true);
  ArrayList params=new ArrayList();
  params.add(soot.jimple.StringConstant.v(assertStatusClass.getName()));
  soot.jimple.StaticInvokeExpr invoke=soot.jimple.Jimple.v().newStaticInvokeExpr(methodToInvoke,params);
  soot.jimple.AssignStmt invokeAssign=soot.jimple.Jimple.v().newAssignStmt(invokeLocal,invoke);
  body.getUnits().add(invokeAssign);
  soot.jimple.AssignStmt fieldRefAssign=soot.jimple.Jimple.v().newAssignStmt(fieldRef,invokeLocal);
  body.getUnits().add(fieldRefAssign);
  soot.jimple.NopStmt nop2=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.GotoStmt goto1=soot.jimple.Jimple.v().newGotoStmt(nop2);
  body.getUnits().add(goto1);
  body.getUnits().add(nop1);
  soot.jimple.AssignStmt fieldRefAssign2=soot.jimple.Jimple.v().newAssignStmt(invokeLocal,fieldRef);
  body.getUnits().add(fieldRefAssign2);
  body.getUnits().add(nop2);
  soot.Local boolLocal1=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.BooleanType.v());
  body.getLocals().add(boolLocal1);
  soot.Local boolLocal2=soot.jimple.Jimple.v().newLocal("String_Node_Str",soot.BooleanType.v());
  body.getLocals().add(boolLocal2);
  soot.SootMethodRef vMethodToInvoke=Scene.v().makeMethodRef(soot.Scene.v().getSootClass("String_Node_Str"),"String_Node_Str",new ArrayList(),soot.BooleanType.v(),false);
  soot.jimple.VirtualInvokeExpr vInvoke=soot.jimple.Jimple.v().newVirtualInvokeExpr(invokeLocal,vMethodToInvoke,new ArrayList());
  soot.jimple.AssignStmt testAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal1,vInvoke);
  body.getUnits().add(testAssign);
  soot.jimple.ConditionExpr cond2=soot.jimple.Jimple.v().newNeExpr(boolLocal1,soot.jimple.IntConstant.v(0));
  soot.jimple.NopStmt nop3=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.IfStmt ifStmt2=soot.jimple.Jimple.v().newIfStmt(cond2,nop3);
  body.getUnits().add(ifStmt2);
  soot.jimple.AssignStmt altAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal2,soot.jimple.IntConstant.v(1));
  body.getUnits().add(altAssign);
  soot.jimple.NopStmt nop4=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.GotoStmt goto2=soot.jimple.Jimple.v().newGotoStmt(nop4);
  body.getUnits().add(goto2);
  body.getUnits().add(nop3);
  soot.jimple.AssignStmt conAssign=soot.jimple.Jimple.v().newAssignStmt(boolLocal2,soot.jimple.IntConstant.v(0));
  body.getUnits().add(conAssign);
  body.getUnits().add(nop4);
  soot.SootFieldRef fieldD=Scene.v().makeFieldRef(body.getMethod().getDeclaringClass(),"String_Node_Str",soot.BooleanType.v(),true);
  soot.jimple.FieldRef fieldRefD=soot.jimple.Jimple.v().newStaticFieldRef(fieldD);
  soot.jimple.AssignStmt fAssign=soot.jimple.Jimple.v().newAssignStmt(fieldRefD,boolLocal2);
  body.getUnits().add(fAssign);
}