Program: 88558
Project: 88558
Buggy source:
/** 
 * Assert Stmt Creation
 */
private void createAssert(polyglot.ast.Assert assertStmt){
  soot.Local testLocal=lg.generateLocal(soot.BooleanType.v());
  soot.SootFieldRef assertField=soot.Scene.v().makeFieldRef(body.getMethod().getDeclaringClass(),"String_Node_Str",soot.BooleanType.v(),true);
  soot.jimple.FieldRef assertFieldRef=soot.jimple.Jimple.v().newStaticFieldRef(assertField);
  soot.jimple.AssignStmt fieldAssign=soot.jimple.Jimple.v().newAssignStmt(testLocal,assertFieldRef);
  body.getUnits().add(fieldAssign);
  soot.jimple.NopStmt nop1=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.ConditionExpr cond1=soot.jimple.Jimple.v().newNeExpr(testLocal,soot.jimple.IntConstant.v(0));
  soot.jimple.IfStmt testIf=soot.jimple.Jimple.v().newIfStmt(cond1,nop1);
  body.getUnits().add(testIf);
  if ((assertStmt.cond() instanceof polyglot.ast.BooleanLit) && (!((polyglot.ast.BooleanLit)assertStmt.cond()).value())) {
  }
 else {
    soot.Value sootCond=base().createExpr(assertStmt.cond());
    boolean needIf=needSootIf(sootCond);
    if (!(sootCond instanceof soot.jimple.ConditionExpr)) {
      sootCond=soot.jimple.Jimple.v().newEqExpr(sootCond,soot.jimple.IntConstant.v(1));
    }
 else {
      sootCond=handleDFLCond((soot.jimple.ConditionExpr)sootCond);
    }
    if (needIf) {
      soot.jimple.IfStmt ifStmt=soot.jimple.Jimple.v().newIfStmt(sootCond,nop1);
      body.getUnits().add(ifStmt);
      Util.addLnPosTags(ifStmt.getConditionBox(),assertStmt.cond().position());
      Util.addLnPosTags(ifStmt,assertStmt.position());
    }
  }
  soot.Local failureLocal=lg.generateLocal(soot.RefType.v("String_Node_Str"));
  soot.jimple.NewExpr newExpr=soot.jimple.Jimple.v().newNewExpr(soot.RefType.v("String_Node_Str"));
  soot.jimple.AssignStmt newAssign=soot.jimple.Jimple.v().newAssignStmt(failureLocal,newExpr);
  body.getUnits().add(newAssign);
  soot.SootMethodRef methToInvoke;
  ArrayList paramTypes=new ArrayList();
  ArrayList params=new ArrayList();
  if (assertStmt.errorMessage() != null) {
    soot.Value errorExpr=base().createExpr(assertStmt.errorMessage());
    soot.Type errorType=errorExpr.getType();
    if (assertStmt.errorMessage().type().isChar()) {
      errorType=soot.CharType.v();
    }
    if (errorType instanceof soot.IntType) {
      paramTypes.add(soot.IntType.v());
    }
 else     if (errorType instanceof soot.LongType) {
      paramTypes.add(soot.LongType.v());
    }
 else     if (errorType instanceof soot.FloatType) {
      paramTypes.add(soot.FloatType.v());
    }
 else     if (errorType instanceof soot.DoubleType) {
      paramTypes.add(soot.DoubleType.v());
    }
 else     if (errorType instanceof soot.CharType) {
      paramTypes.add(soot.CharType.v());
    }
 else     if (errorType instanceof soot.BooleanType) {
      paramTypes.add(soot.BooleanType.v());
    }
 else     if (errorType instanceof soot.ShortType) {
      paramTypes.add(soot.IntType.v());
    }
 else     if (errorType instanceof soot.ByteType) {
      paramTypes.add(soot.IntType.v());
    }
 else {
      paramTypes.add(soot.Scene.v().getSootClass("String_Node_Str").getType());
    }
    params.add(errorExpr);
  }
  methToInvoke=soot.Scene.v().makeMethodRef(soot.Scene.v().getSootClass("String_Node_Str"),"String_Node_Str",paramTypes,soot.VoidType.v(),false);
  soot.jimple.SpecialInvokeExpr invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(failureLocal,methToInvoke,params);
  soot.jimple.InvokeStmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(invokeExpr);
  body.getUnits().add(invokeStmt);
  if (assertStmt.errorMessage() != null) {
    Util.addLnPosTags(invokeExpr.getArgBox(0),assertStmt.errorMessage().position());
  }
  soot.jimple.ThrowStmt throwStmt=soot.jimple.Jimple.v().newThrowStmt(failureLocal);
  body.getUnits().add(throwStmt);
  body.getUnits().add(nop1);
}

Fixed version (ground truth):
/** 
 * Assert Stmt Creation
 */
private void createAssert(polyglot.ast.Assert assertStmt){
  soot.Local testLocal=lg.generateLocal(soot.BooleanType.v());
  soot.SootFieldRef assertField=soot.Scene.v().makeFieldRef(body.getMethod().getDeclaringClass(),"String_Node_Str",soot.BooleanType.v(),true);
  soot.jimple.FieldRef assertFieldRef=soot.jimple.Jimple.v().newStaticFieldRef(assertField);
  soot.jimple.AssignStmt fieldAssign=soot.jimple.Jimple.v().newAssignStmt(testLocal,assertFieldRef);
  body.getUnits().add(fieldAssign);
  soot.jimple.NopStmt nop1=soot.jimple.Jimple.v().newNopStmt();
  soot.jimple.ConditionExpr cond1=soot.jimple.Jimple.v().newNeExpr(testLocal,soot.jimple.IntConstant.v(0));
  soot.jimple.IfStmt testIf=soot.jimple.Jimple.v().newIfStmt(cond1,nop1);
  body.getUnits().add(testIf);
  if ((assertStmt.cond() instanceof polyglot.ast.BooleanLit) && (!((polyglot.ast.BooleanLit)assertStmt.cond()).value())) {
  }
 else {
    soot.Value sootCond=base().createExpr(assertStmt.cond());
    boolean needIf=needSootIf(sootCond);
    if (!(sootCond instanceof soot.jimple.ConditionExpr)) {
      sootCond=soot.jimple.Jimple.v().newEqExpr(sootCond,soot.jimple.IntConstant.v(1));
    }
 else {
      sootCond=handleDFLCond((soot.jimple.ConditionExpr)sootCond);
    }
    if (needIf) {
      soot.jimple.IfStmt ifStmt=soot.jimple.Jimple.v().newIfStmt(sootCond,nop1);
      body.getUnits().add(ifStmt);
      Util.addLnPosTags(ifStmt.getConditionBox(),assertStmt.cond().position());
      Util.addLnPosTags(ifStmt,assertStmt.position());
    }
  }
  soot.Local failureLocal=lg.generateLocal(soot.RefType.v("String_Node_Str"));
  soot.jimple.NewExpr newExpr=soot.jimple.Jimple.v().newNewExpr(soot.RefType.v("String_Node_Str"));
  soot.jimple.AssignStmt newAssign=soot.jimple.Jimple.v().newAssignStmt(failureLocal,newExpr);
  body.getUnits().add(newAssign);
  soot.SootMethodRef methToInvoke;
  ArrayList paramTypes=new ArrayList();
  ArrayList params=new ArrayList();
  if (assertStmt.errorMessage() != null) {
    soot.Value errorExpr=base().createExpr(assertStmt.errorMessage());
    if (errorExpr instanceof soot.jimple.ConditionExpr) {
      errorExpr=handleCondBinExpr((soot.jimple.ConditionExpr)errorExpr);
    }
    soot.Type errorType=errorExpr.getType();
    if (assertStmt.errorMessage().type().isChar()) {
      errorType=soot.CharType.v();
    }
    if (errorType instanceof soot.IntType) {
      paramTypes.add(soot.IntType.v());
    }
 else     if (errorType instanceof soot.LongType) {
      paramTypes.add(soot.LongType.v());
    }
 else     if (errorType instanceof soot.FloatType) {
      paramTypes.add(soot.FloatType.v());
    }
 else     if (errorType instanceof soot.DoubleType) {
      paramTypes.add(soot.DoubleType.v());
    }
 else     if (errorType instanceof soot.CharType) {
      paramTypes.add(soot.CharType.v());
    }
 else     if (errorType instanceof soot.BooleanType) {
      paramTypes.add(soot.BooleanType.v());
    }
 else     if (errorType instanceof soot.ShortType) {
      paramTypes.add(soot.IntType.v());
    }
 else     if (errorType instanceof soot.ByteType) {
      paramTypes.add(soot.IntType.v());
    }
 else {
      paramTypes.add(soot.Scene.v().getSootClass("String_Node_Str").getType());
    }
    params.add(errorExpr);
  }
  methToInvoke=soot.Scene.v().makeMethodRef(soot.Scene.v().getSootClass("String_Node_Str"),"String_Node_Str",paramTypes,soot.VoidType.v(),false);
  soot.jimple.SpecialInvokeExpr invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(failureLocal,methToInvoke,params);
  soot.jimple.InvokeStmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(invokeExpr);
  body.getUnits().add(invokeStmt);
  if (assertStmt.errorMessage() != null) {
    Util.addLnPosTags(invokeExpr.getArgBox(0),assertStmt.errorMessage().position());
  }
  soot.jimple.ThrowStmt throwStmt=soot.jimple.Jimple.v().newThrowStmt(failureLocal);
  body.getUnits().add(throwStmt);
  body.getUnits().add(nop1);
}