Program: 88614
Project: 88614
Buggy source:
/** 
 * New Expression Creation
 */
private soot.Local getNewLocal(polyglot.ast.New newExpr){
  ArrayList sootParams=new ArrayList();
  ArrayList sootParamsTypes=new ArrayList();
  polyglot.types.ClassType objType=(polyglot.types.ClassType)newExpr.objectType().type();
  if (newExpr.anonType() != null) {
    objType=newExpr.anonType();
    String name=Util.getSootType(objType).toString();
    polyglot.types.ClassType outerType=objType.outer();
    if (!InitialResolver.v().hasClassInnerTag(body.getMethod().getDeclaringClass(),name)) {
      Util.addInnerClassTag(body.getMethod().getDeclaringClass(),name,null,null,outerType.flags().isInterface() ? soot.Modifier.PUBLIC | soot.Modifier.STATIC : Util.getModifier(objType.flags()));
    }
  }
 else {
    if (!objType.isTopLevel()) {
      String name=Util.getSootType(objType).toString();
      polyglot.types.ClassType outerType=objType.outer();
      if (!InitialResolver.v().hasClassInnerTag(body.getMethod().getDeclaringClass(),name)) {
        Util.addInnerClassTag(body.getMethod().getDeclaringClass(),name,Util.getSootType(outerType).toString(),objType.name(),outerType.flags().isInterface() ? soot.Modifier.PUBLIC | soot.Modifier.STATIC : Util.getModifier(objType.flags()));
      }
    }
  }
  soot.RefType sootType=(soot.RefType)Util.getSootType(objType);
  soot.Local retLocal=lg.generateLocal(sootType);
  soot.jimple.NewExpr sootNew=soot.jimple.Jimple.v().newNewExpr(sootType);
  soot.jimple.Stmt stmt=soot.jimple.Jimple.v().newAssignStmt(retLocal,sootNew);
  body.getUnits().add(stmt);
  Util.addLnPosTags(stmt,newExpr.position());
  soot.SootClass classToInvoke=sootType.getSootClass();
  soot.Value qVal=null;
  if (newExpr.qualifier() != null) {
    qVal=base().createExpr(newExpr.qualifier());
  }
  handleOuterClassParams(sootParams,qVal,sootParamsTypes,objType);
  sootParams.addAll(getSootParams(newExpr));
  sootParamsTypes.addAll(getSootParamsTypes(newExpr));
  handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)objType);
  soot.SootMethodRef methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v(),false);
  soot.jimple.SpecialInvokeExpr specialInvokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(retLocal,methodToInvoke,sootParams);
  soot.jimple.Stmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(specialInvokeExpr);
  body.getUnits().add(invokeStmt);
  Util.addLnPosTags(invokeStmt,newExpr.position());
  int numParams=0;
  Iterator invokeParamsIt=newExpr.arguments().iterator();
  while (invokeParamsIt.hasNext()) {
    Util.addLnPosTags(specialInvokeExpr.getArgBox(numParams),((polyglot.ast.Expr)invokeParamsIt.next()).position());
    numParams++;
  }
  return retLocal;
}

Fixed version (ground truth):
/** 
 * New Expression Creation
 */
private soot.Local getNewLocal(polyglot.ast.New newExpr){
  ArrayList sootParams=new ArrayList();
  ArrayList sootParamsTypes=new ArrayList();
  polyglot.types.ClassType objType=(polyglot.types.ClassType)newExpr.objectType().type();
  if (newExpr.anonType() != null) {
    objType=newExpr.anonType();
    String name=Util.getSootType(objType).toString();
    polyglot.types.ClassType outerType=objType.outer();
    if (!InitialResolver.v().hasClassInnerTag(body.getMethod().getDeclaringClass(),name)) {
      Util.addInnerClassTag(body.getMethod().getDeclaringClass(),name,null,null,outerType.flags().isInterface() ? soot.Modifier.PUBLIC | soot.Modifier.STATIC : Util.getModifier(objType.flags()));
    }
  }
 else {
    if (!objType.isTopLevel()) {
      String name=Util.getSootType(objType).toString();
      polyglot.types.ClassType outerType=objType.outer();
      if (!InitialResolver.v().hasClassInnerTag(body.getMethod().getDeclaringClass(),name)) {
        Util.addInnerClassTag(body.getMethod().getDeclaringClass(),name,Util.getSootType(outerType).toString(),objType.name(),outerType.flags().isInterface() ? soot.Modifier.PUBLIC | soot.Modifier.STATIC : Util.getModifier(objType.flags()));
      }
    }
  }
  soot.RefType sootType=(soot.RefType)Util.getSootType(objType);
  soot.Local retLocal=lg.generateLocal(sootType);
  soot.jimple.NewExpr sootNew=soot.jimple.Jimple.v().newNewExpr(sootType);
  soot.jimple.Stmt stmt=soot.jimple.Jimple.v().newAssignStmt(retLocal,sootNew);
  body.getUnits().add(stmt);
  Util.addLnPosTags(stmt,newExpr.position());
  soot.SootClass classToInvoke=sootType.getSootClass();
  soot.Value qVal=null;
  if (newExpr.qualifier() != null) {
    qVal=base().createExpr(newExpr.qualifier());
  }
  handleOuterClassParams(sootParams,qVal,sootParamsTypes,objType);
  sootParams.addAll(getSootParams(newExpr));
  sootParamsTypes.addAll(getSootParamsTypes(newExpr));
  handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)objType);
  System.out.println("String_Node_Str" + classToInvoke + "String_Node_Str"+ sootParamsTypes);
  soot.SootMethodRef methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v(),false);
  soot.jimple.SpecialInvokeExpr specialInvokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(retLocal,methodToInvoke,sootParams);
  soot.jimple.Stmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(specialInvokeExpr);
  body.getUnits().add(invokeStmt);
  Util.addLnPosTags(invokeStmt,newExpr.position());
  int numParams=0;
  Iterator invokeParamsIt=newExpr.arguments().iterator();
  while (invokeParamsIt.hasNext()) {
    Util.addLnPosTags(specialInvokeExpr.getArgBox(numParams),((polyglot.ast.Expr)invokeParamsIt.next()).position());
    numParams++;
  }
  return retLocal;
}