Program: 88700
Project: 88700
Buggy source:
/** 
 * Call Expression Creation
 */
private soot.Local getCallLocal(polyglot.ast.Call call){
  String name=call.name();
  polyglot.ast.Receiver receiver=call.target();
  soot.Local baseLocal=(soot.Local)getBaseLocal(receiver);
  soot.SootClass receiverTypeClass=((soot.RefType)Util.getSootType(receiver.type())).getSootClass();
  polyglot.types.MethodInstance methodInstance=call.methodInstance();
  soot.Type sootRetType=Util.getSootType(methodInstance.returnType());
  ArrayList sootParamsTypes=getSootParamsTypes(call);
  ArrayList sootParams=getSootParams(call);
  soot.SootMethod callMethod=getMethodFromClass(receiverTypeClass,methodInstance.name(),sootParamsTypes,sootRetType);
  boolean isPrivateAccess=false;
  soot.javaToJimple.PolyglotMethodSource ms=(soot.javaToJimple.PolyglotMethodSource)body.getMethod().getSource();
  if ((ms.getPrivateAccessMap() != null) && (ms.getPrivateAccessMap().containsKey(call.methodInstance()))) {
    callMethod=(soot.SootMethod)ms.getPrivateAccessMap().get(call.methodInstance());
    if (!call.methodInstance().flags().isStatic()) {
      sootParams.add(baseLocal);
    }
    isPrivateAccess=true;
  }
  soot.jimple.InvokeExpr invokeExpr;
  if (isPrivateAccess) {
    invokeExpr=soot.jimple.Jimple.v().newStaticInvokeExpr(callMethod,sootParams);
  }
 else   if (soot.Modifier.isInterface(receiverTypeClass.getModifiers())) {
    invokeExpr=soot.jimple.Jimple.v().newInterfaceInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else   if (methodInstance.flags().isStatic()) {
    invokeExpr=soot.jimple.Jimple.v().newStaticInvokeExpr(callMethod,sootParams);
  }
 else   if (methodInstance.flags().isPrivate()) {
    invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else   if ((receiver instanceof polyglot.ast.Special) && (((polyglot.ast.Special)receiver).kind() == polyglot.ast.Special.SUPER)) {
    invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else {
    invokeExpr=soot.jimple.Jimple.v().newVirtualInvokeExpr(baseLocal,callMethod,sootParams);
  }
  int numParams=0;
  Iterator callParamsIt=call.arguments().iterator();
  while (callParamsIt.hasNext()) {
    Util.addLnPosTags(invokeExpr.getArgBox(numParams),((polyglot.ast.Expr)callParamsIt.next()).position());
    numParams++;
  }
  if (invokeExpr instanceof soot.jimple.InstanceInvokeExpr) {
    Util.addLnPosTags(((soot.jimple.InstanceInvokeExpr)invokeExpr).getBaseBox(),call.target().position());
  }
  if (invokeExpr.getMethod().getReturnType().equals(soot.VoidType.v())) {
    soot.jimple.Stmt invoke=soot.jimple.Jimple.v().newInvokeStmt(invokeExpr);
    body.getUnits().add(invoke);
    Util.addLnPosTags(invoke,call.position());
    return null;
  }
 else {
    soot.Local retLocal=lg.generateLocal(invokeExpr.getMethod().getReturnType());
    soot.jimple.Stmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(retLocal,invokeExpr);
    body.getUnits().add(assignStmt);
    Util.addLnPosTags(assignStmt,call.position());
    return retLocal;
  }
}

Fixed version (ground truth):
/** 
 * Call Expression Creation
 */
private soot.Local getCallLocal(polyglot.ast.Call call){
  String name=call.name();
  polyglot.ast.Receiver receiver=call.target();
  soot.Local baseLocal=(soot.Local)getBaseLocal(receiver);
  soot.SootClass receiverTypeClass=((soot.RefType)Util.getSootType(receiver.type())).getSootClass();
  polyglot.types.MethodInstance methodInstance=call.methodInstance();
  soot.Type sootRetType=Util.getSootType(methodInstance.returnType());
  ArrayList sootParamsTypes=getSootParamsTypes(call);
  ArrayList sootParams=getSootParams(call);
  soot.SootMethod callMethod=getMethodFromClass(receiverTypeClass,methodInstance.name(),sootParamsTypes,sootRetType);
  boolean isPrivateAccess=false;
  soot.javaToJimple.PolyglotMethodSource ms=(soot.javaToJimple.PolyglotMethodSource)body.getMethod().getSource();
  if ((ms.getPrivateAccessMap() != null) && (ms.getPrivateAccessMap().containsKey(call.methodInstance()))) {
    callMethod=(soot.SootMethod)ms.getPrivateAccessMap().get(call.methodInstance());
    if (!call.methodInstance().flags().isStatic()) {
      sootParams.add(baseLocal);
    }
    isPrivateAccess=true;
  }
  System.out.println("String_Node_Str" + methodInstance.name() + "String_Node_Str"+ methodInstance.flags());
  soot.jimple.InvokeExpr invokeExpr;
  if (isPrivateAccess) {
    invokeExpr=soot.jimple.Jimple.v().newStaticInvokeExpr(callMethod,sootParams);
  }
 else   if (soot.Modifier.isInterface(receiverTypeClass.getModifiers()) && methodInstance.flags().isAbstract()) {
    invokeExpr=soot.jimple.Jimple.v().newInterfaceInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else   if (methodInstance.flags().isStatic()) {
    invokeExpr=soot.jimple.Jimple.v().newStaticInvokeExpr(callMethod,sootParams);
  }
 else   if (methodInstance.flags().isPrivate()) {
    invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else   if ((receiver instanceof polyglot.ast.Special) && (((polyglot.ast.Special)receiver).kind() == polyglot.ast.Special.SUPER)) {
    invokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(baseLocal,callMethod,sootParams);
  }
 else {
    invokeExpr=soot.jimple.Jimple.v().newVirtualInvokeExpr(baseLocal,callMethod,sootParams);
  }
  int numParams=0;
  Iterator callParamsIt=call.arguments().iterator();
  while (callParamsIt.hasNext()) {
    Util.addLnPosTags(invokeExpr.getArgBox(numParams),((polyglot.ast.Expr)callParamsIt.next()).position());
    numParams++;
  }
  if (invokeExpr instanceof soot.jimple.InstanceInvokeExpr) {
    Util.addLnPosTags(((soot.jimple.InstanceInvokeExpr)invokeExpr).getBaseBox(),call.target().position());
  }
  if (invokeExpr.getMethod().getReturnType().equals(soot.VoidType.v())) {
    soot.jimple.Stmt invoke=soot.jimple.Jimple.v().newInvokeStmt(invokeExpr);
    body.getUnits().add(invoke);
    Util.addLnPosTags(invoke,call.position());
    return null;
  }
 else {
    soot.Local retLocal=lg.generateLocal(invokeExpr.getMethod().getReturnType());
    soot.jimple.Stmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(retLocal,invokeExpr);
    body.getUnits().add(assignStmt);
    Util.addLnPosTags(assignStmt,call.position());
    return retLocal;
  }
}