Program: 88634
Project: 88634
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();
  if (newExpr.qualifier() != null) {
    if ((objType.outer() != null) && (body.getMethod().getDeclaringClass().equals(((soot.RefType)Util.getSootType(objType.outer())).getSootClass())) && (!soot.Modifier.isStatic(body.getMethod().getModifiers()))) {
      handleOuterClassParams(sootParams,sootParamsTypes,objType);
    }
 else {
      soot.Value qVal=createExpr(newExpr.qualifier());
      sootParams.add(qVal);
      sootParamsTypes.add(qVal.getType());
      body.getUnits().add(soot.jimple.Jimple.v().newInvokeStmt(soot.jimple.Jimple.v().newVirtualInvokeExpr((soot.Local)qVal,soot.Scene.v().getSootClass("String_Node_Str").getMethodByName("String_Node_Str"),new ArrayList())));
    }
  }
 else {
    handleOuterClassParams(sootParams,sootParamsTypes,objType);
  }
  sootParams.addAll(getSootParams(newExpr));
  sootParamsTypes.addAll(getSootParamsTypes(newExpr));
  handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)objType);
  soot.SootMethod methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v());
  if (!methodToInvoke.getDeclaringClass().getType().equals(classToInvoke.getType())) {
    throw new RuntimeException("String_Node_Str" + classToInvoke.getType() + "String_Node_Str"+ methodToInvoke.getDeclaringClass().getType());
  }
  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=createExpr(newExpr.qualifier());
  }
  handleOuterClassParams(sootParams,qVal,sootParamsTypes,objType);
  sootParams.addAll(getSootParams(newExpr));
  sootParamsTypes.addAll(getSootParamsTypes(newExpr));
  handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)objType);
  soot.SootMethod methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v());
  if (!methodToInvoke.getDeclaringClass().getType().equals(classToInvoke.getType())) {
    throw new RuntimeException("String_Node_Str" + classToInvoke.getType() + "String_Node_Str"+ methodToInvoke.getDeclaringClass().getType());
  }
  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;
}