Program: 88615
Project: 88615
Buggy source:
/** 
 * Assign Expression Creation
 */
private soot.Value getAssignLocal(polyglot.ast.Assign assign){
  if ((assign.left() instanceof polyglot.ast.Field) && (needsPrivateAccessor((polyglot.ast.Field)assign.left()) || needsProtectedAccessor((polyglot.ast.Field)assign.left()))) {
    return handlePrivateFieldSet(assign);
  }
  if (assign.operator() == polyglot.ast.Assign.ASSIGN) {
    return getSimpleAssignLocal(assign);
  }
  if ((assign.operator() == polyglot.ast.Assign.ADD_ASSIGN) && assign.type().toString().equals("String_Node_Str")) {
    return getStrConAssignLocal(assign);
  }
  soot.jimple.AssignStmt stmt;
  soot.Value left=createLHS(assign.left());
  soot.Value left2=(soot.Value)left.clone();
  soot.Local leftLocal;
  if (left instanceof soot.Local) {
    leftLocal=(soot.Local)left;
  }
 else {
    leftLocal=lg.generateLocal(left.getType());
    soot.jimple.AssignStmt stmt1=soot.jimple.Jimple.v().newAssignStmt(leftLocal,left);
    body.getUnits().add(stmt1);
    Util.addLnPosTags(stmt1,assign.position());
  }
  soot.Value right=getAssignRightLocal(assign,leftLocal);
  soot.jimple.AssignStmt stmt2=soot.jimple.Jimple.v().newAssignStmt(leftLocal,right);
  body.getUnits().add(stmt2);
  Util.addLnPosTags(stmt2,assign.position());
  Util.addLnPosTags(stmt2.getRightOpBox(),assign.right().position());
  Util.addLnPosTags(stmt2.getLeftOpBox(),assign.left().position());
  if (!(left instanceof soot.Local)) {
    soot.jimple.AssignStmt stmt3=soot.jimple.Jimple.v().newAssignStmt(left2,leftLocal);
    body.getUnits().add(stmt3);
    Util.addLnPosTags(stmt3,assign.position());
    Util.addLnPosTags(stmt3.getRightOpBox(),assign.right().position());
    Util.addLnPosTags(stmt3.getLeftOpBox(),assign.left().position());
  }
  return leftLocal;
}

Fixed version (ground truth):
/** 
 * Assign Expression Creation
 */
private soot.Value getAssignLocal(polyglot.ast.Assign assign){
  if ((assign.left() instanceof polyglot.ast.Field) && (needsPrivateAccessor((polyglot.ast.Field)assign.left()) || needsProtectedAccessor((polyglot.ast.Field)assign.left()))) {
    return handlePrivateFieldAssignSet(assign);
  }
  if (assign.operator() == polyglot.ast.Assign.ASSIGN) {
    return getSimpleAssignLocal(assign);
  }
  if ((assign.operator() == polyglot.ast.Assign.ADD_ASSIGN) && assign.type().toString().equals("String_Node_Str")) {
    return getStrConAssignLocal(assign);
  }
  soot.jimple.AssignStmt stmt;
  soot.Value left=createLHS(assign.left());
  soot.Value left2=(soot.Value)left.clone();
  soot.Local leftLocal;
  if (left instanceof soot.Local) {
    leftLocal=(soot.Local)left;
  }
 else {
    leftLocal=lg.generateLocal(left.getType());
    soot.jimple.AssignStmt stmt1=soot.jimple.Jimple.v().newAssignStmt(leftLocal,left);
    body.getUnits().add(stmt1);
    Util.addLnPosTags(stmt1,assign.position());
  }
  soot.Value right=getAssignRightLocal(assign,leftLocal);
  soot.jimple.AssignStmt stmt2=soot.jimple.Jimple.v().newAssignStmt(leftLocal,right);
  body.getUnits().add(stmt2);
  Util.addLnPosTags(stmt2,assign.position());
  Util.addLnPosTags(stmt2.getRightOpBox(),assign.right().position());
  Util.addLnPosTags(stmt2.getLeftOpBox(),assign.left().position());
  if (!(left instanceof soot.Local)) {
    soot.jimple.AssignStmt stmt3=soot.jimple.Jimple.v().newAssignStmt(left2,leftLocal);
    body.getUnits().add(stmt3);
    Util.addLnPosTags(stmt3,assign.position());
    Util.addLnPosTags(stmt3.getRightOpBox(),assign.right().position());
    Util.addLnPosTags(stmt3.getLeftOpBox(),assign.left().position());
  }
  return leftLocal;
}