Program: 88632
Project: 88632
Buggy source:
/** 
 * Constructor Call Creation
 */
private void createConstructorCall(polyglot.ast.ConstructorCall cCall){
  ArrayList sootParams=new ArrayList();
  ArrayList sootParamsTypes=new ArrayList();
  polyglot.types.ConstructorInstance cInst=cCall.constructorInstance();
  String containerName=null;
  if (cInst.container() instanceof polyglot.types.ClassType) {
    containerName=((polyglot.types.ClassType)cInst.container()).fullName();
  }
  soot.SootClass classToInvoke;
  if (cCall.kind() == polyglot.ast.ConstructorCall.SUPER) {
    classToInvoke=((soot.RefType)Util.getSootType(cInst.container())).getSootClass();
  }
 else   if (cCall.kind() == polyglot.ast.ConstructorCall.THIS) {
    classToInvoke=body.getMethod().getDeclaringClass();
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  soot.Local base=specialThisLocal;
  if (cCall.qualifier() != null) {
    polyglot.types.ClassType objType=(polyglot.types.ClassType)cInst.container();
    if ((objType.outer() != null) && (body.getMethod().getDeclaringClass().equals(((soot.RefType)Util.getSootType(objType.outer())).getSootClass()))) {
      handleOuterClassParams(sootParams,sootParamsTypes,objType);
    }
 else {
      soot.Local qVal=(soot.Local)createExpr(cCall.qualifier());
      sootParams.add(qVal);
      sootParamsTypes.add(qVal.getType());
      body.getUnits().add(soot.jimple.Jimple.v().newInvokeStmt(soot.jimple.Jimple.v().newVirtualInvokeExpr(qVal,soot.Scene.v().getSootClass("String_Node_Str").getMethodByName("String_Node_Str"),new ArrayList())));
    }
  }
 else {
    handleOuterClassParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)cInst.container());
  }
  int index=classToInvoke.getName().lastIndexOf("String_Node_Str");
  sootParams.addAll(getSootParams(cCall));
  sootParamsTypes.addAll(getSootParamsTypes(cCall));
  if (index != -1) {
    handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)cCall.constructorInstance().container());
  }
  soot.SootMethod methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v());
  soot.jimple.SpecialInvokeExpr specialInvokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(base,methodToInvoke,sootParams);
  soot.jimple.Stmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(specialInvokeExpr);
  body.getUnits().add(invokeStmt);
  Util.addLnPosTags(invokeStmt,cCall.position());
  int numParams=0;
  Iterator invokeParamsIt=cCall.arguments().iterator();
  while (invokeParamsIt.hasNext()) {
    Util.addLnPosTags(specialInvokeExpr.getArgBox(numParams),((polyglot.ast.Expr)invokeParamsIt.next()).position());
    numParams++;
  }
  if (body.getMethod().getName().equals("String_Node_Str") && (cCall.kind() == polyglot.ast.ConstructorCall.SUPER)) {
    handleOuterClassThisInit(body.getMethod());
    handleFinalLocalInits();
    handleFieldInits(body.getMethod());
    handleInitializerBlocks(body.getMethod());
  }
}

Fixed version (ground truth):
/** 
 * Constructor Call Creation
 */
private void createConstructorCall(polyglot.ast.ConstructorCall cCall){
  ArrayList sootParams=new ArrayList();
  ArrayList sootParamsTypes=new ArrayList();
  polyglot.types.ConstructorInstance cInst=cCall.constructorInstance();
  String containerName=null;
  if (cInst.container() instanceof polyglot.types.ClassType) {
    containerName=((polyglot.types.ClassType)cInst.container()).fullName();
  }
  soot.SootClass classToInvoke;
  if (cCall.kind() == polyglot.ast.ConstructorCall.SUPER) {
    classToInvoke=((soot.RefType)Util.getSootType(cInst.container())).getSootClass();
  }
 else   if (cCall.kind() == polyglot.ast.ConstructorCall.THIS) {
    classToInvoke=body.getMethod().getDeclaringClass();
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  soot.Local base=specialThisLocal;
  polyglot.types.ClassType objType=(polyglot.types.ClassType)cInst.container();
  soot.Local qVal=null;
  if (cCall.qualifier() != null) {
    qVal=(soot.Local)createExpr(cCall.qualifier());
  }
  handleOuterClassParams(sootParams,qVal,sootParamsTypes,objType);
  int index=classToInvoke.getName().lastIndexOf("String_Node_Str");
  sootParams.addAll(getSootParams(cCall));
  sootParamsTypes.addAll(getSootParamsTypes(cCall));
  if (index != -1) {
    handleFinalLocalParams(sootParams,sootParamsTypes,(polyglot.types.ClassType)cCall.constructorInstance().container());
  }
  soot.SootMethod methodToInvoke=getMethodFromClass(classToInvoke,"String_Node_Str",sootParamsTypes,soot.VoidType.v());
  soot.jimple.SpecialInvokeExpr specialInvokeExpr=soot.jimple.Jimple.v().newSpecialInvokeExpr(base,methodToInvoke,sootParams);
  soot.jimple.Stmt invokeStmt=soot.jimple.Jimple.v().newInvokeStmt(specialInvokeExpr);
  body.getUnits().add(invokeStmt);
  Util.addLnPosTags(invokeStmt,cCall.position());
  int numParams=0;
  Iterator invokeParamsIt=cCall.arguments().iterator();
  while (invokeParamsIt.hasNext()) {
    Util.addLnPosTags(specialInvokeExpr.getArgBox(numParams),((polyglot.ast.Expr)invokeParamsIt.next()).position());
    numParams++;
  }
  if (body.getMethod().getName().equals("String_Node_Str") && (cCall.kind() == polyglot.ast.ConstructorCall.SUPER)) {
    handleOuterClassThisInit(body.getMethod());
    handleFinalLocalInits();
    handleFieldInits(body.getMethod());
    handleInitializerBlocks(body.getMethod());
  }
}