Program: 34436
Project: 34436
Buggy source:
public SootMethod generateRedirectMethodForBindService(SootClass serviceConnection,SootClass destComp){
  String newSM_name="String_Node_Str" + num++;
  List<Type> newSM_parameters=new ArrayList<Type>();
  newSM_parameters.add(serviceConnection.getType());
  newSM_parameters.add(INTENT_TYPE);
  Type newSM_return_type=VoidType.v();
  int modifiers=Modifier.STATIC | Modifier.PUBLIC;
  SootMethod newSM=new SootMethod(newSM_name,newSM_parameters,newSM_return_type,modifiers);
  ipcSC.addMethod(newSM);
  JimpleBody b=Jimple.v().newBody(newSM);
  newSM.setActiveBody(b);
  LocalGenerator lg=new LocalGenerator(b);
  Local originActivityParameterLocal=lg.generateLocal(serviceConnection.getType());
  Unit originActivityParameterU=Jimple.v().newIdentityStmt(originActivityParameterLocal,Jimple.v().newParameterRef(serviceConnection.getType(),0));
  Local intentParameterLocal=lg.generateLocal(INTENT_TYPE);
  Unit intentParameterU=Jimple.v().newIdentityStmt(intentParameterLocal,Jimple.v().newParameterRef(INTENT_TYPE,1));
  Local destCompLocal=lg.generateLocal(destComp.getType());
  Unit newU=(Unit)Jimple.v().newAssignStmt(destCompLocal,Jimple.v().newNewExpr(destComp.getType()));
  List<Type> parameters=new ArrayList<Type>();
  parameters.add(INTENT_TYPE);
  SootMethod method=destComp.getMethod("String_Node_Str",parameters,VoidType.v());
  List<Value> args=new ArrayList<Value>();
  args.add(intentParameterLocal);
  Unit initU=(Unit)Jimple.v().newInvokeStmt(Jimple.v().newSpecialInvokeExpr(destCompLocal,method.makeRef(),args));
  List<SootMethod> sms=destComp.getMethods();
  for (  SootMethod sm : sms) {
    System.out.println(sm);
  }
  method=destComp.getMethodByName(ICCDummyMainCreator.DUMMY_MAIN_METHOD);
  InvokeExpr invoke=Jimple.v().newVirtualInvokeExpr(destCompLocal,method.makeRef());
  Unit callU=(Unit)Jimple.v().newInvokeStmt(invoke);
  method=destComp.getMethodByName("String_Node_Str");
  Type binderType=method.getReturnType();
  Local ibinderLocal=lg.generateLocal(binderType);
  Unit nullarIntentLocalParamU=(Unit)Jimple.v().newAssignStmt(ibinderLocal,NullConstant.v());
  invoke=Jimple.v().newVirtualInvokeExpr(destCompLocal,method.makeRef());
  Unit destCompCallU=(Unit)Jimple.v().newAssignStmt(ibinderLocal,invoke);
  method=serviceConnection.getMethodByName("String_Node_Str");
  changeParameterType(method,IBINDER_TYPE,binderType);
  Local iLocal1=lg.generateLocal(NullType.v());
  Unit defaultValueParamU1=(Unit)Jimple.v().newAssignStmt(iLocal1,NullConstant.v());
  args=new ArrayList<Value>();
  args.add(iLocal1);
  args.add(ibinderLocal);
  invoke=Jimple.v().newVirtualInvokeExpr(originActivityParameterLocal,method.makeRef(),args);
  Unit onActivityResultCall=(Unit)Jimple.v().newInvokeStmt(invoke);
  b.getUnits().add(originActivityParameterU);
  b.getUnits().add(intentParameterU);
  b.getUnits().add(newU);
  b.getUnits().add(initU);
  b.getUnits().add(callU);
  b.getUnits().add(nullarIntentLocalParamU);
  b.getUnits().add(destCompCallU);
  b.getUnits().add(defaultValueParamU1);
  b.getUnits().add(onActivityResultCall);
  b.getUnits().add(Jimple.v().newReturnVoidStmt());
  System.out.println("String_Node_Str" + newSM + "String_Node_Str"+ newSM.retrieveActiveBody());
  return newSM;
}

Fixed version (ground truth):
public SootMethod generateRedirectMethodForBindService(SootClass serviceConnection,SootClass destComp){
  String newSM_name="String_Node_Str" + num++;
  List<Type> newSM_parameters=new ArrayList<Type>();
  newSM_parameters.add(serviceConnection.getType());
  newSM_parameters.add(INTENT_TYPE);
  Type newSM_return_type=VoidType.v();
  int modifiers=Modifier.STATIC | Modifier.PUBLIC;
  SootMethod newSM=new SootMethod(newSM_name,newSM_parameters,newSM_return_type,modifiers);
  ipcSC.addMethod(newSM);
  JimpleBody b=Jimple.v().newBody(newSM);
  newSM.setActiveBody(b);
  LocalGenerator lg=new LocalGenerator(b);
  Local originActivityParameterLocal=lg.generateLocal(serviceConnection.getType());
  Unit originActivityParameterU=Jimple.v().newIdentityStmt(originActivityParameterLocal,Jimple.v().newParameterRef(serviceConnection.getType(),0));
  Local intentParameterLocal=lg.generateLocal(INTENT_TYPE);
  Unit intentParameterU=Jimple.v().newIdentityStmt(intentParameterLocal,Jimple.v().newParameterRef(INTENT_TYPE,1));
  Local destCompLocal=lg.generateLocal(destComp.getType());
  Unit newU=(Unit)Jimple.v().newAssignStmt(destCompLocal,Jimple.v().newNewExpr(destComp.getType()));
  List<Type> parameters=new ArrayList<Type>();
  parameters.add(INTENT_TYPE);
  SootMethod method=destComp.getMethod("String_Node_Str",parameters,VoidType.v());
  List<Value> args=new ArrayList<Value>();
  args.add(intentParameterLocal);
  Unit initU=(Unit)Jimple.v().newInvokeStmt(Jimple.v().newSpecialInvokeExpr(destCompLocal,method.makeRef(),args));
  List<SootMethod> sms=destComp.getMethods();
  for (  SootMethod sm : sms) {
    System.out.println(sm);
  }
  method=destComp.getMethodByName(ICCDummyMainCreator.DUMMY_MAIN_METHOD);
  InvokeExpr invoke=Jimple.v().newVirtualInvokeExpr(destCompLocal,method.makeRef());
  Unit callU=(Unit)Jimple.v().newInvokeStmt(invoke);
  method=destComp.getMethodByName("String_Node_Str");
  Type binderType=method.getReturnType();
  Local ibinderLocal=lg.generateLocal(binderType);
  Unit nullarIntentLocalParamU=(Unit)Jimple.v().newAssignStmt(ibinderLocal,NullConstant.v());
  invoke=Jimple.v().newVirtualInvokeExpr(destCompLocal,method.makeRef());
  Unit destCompCallU=(Unit)Jimple.v().newAssignStmt(ibinderLocal,invoke);
  method=serviceConnection.getMethodByName("String_Node_Str");
  changeParameterType(method,IBINDER_TYPE,binderType);
  Local iLocal1=lg.generateLocal(NullType.v());
  Unit defaultValueParamU1=(Unit)Jimple.v().newAssignStmt(iLocal1,NullConstant.v());
  args=new ArrayList<Value>();
  args.add(iLocal1);
  args.add(ibinderLocal);
  PointsToSet pointsToSet=Scene.v().getPointsToAnalysis().reachingObjects(originActivityParameterLocal);
  System.out.println(pointsToSet.possibleClassConstants());
  System.out.println(pointsToSet.possibleStringConstants());
  System.out.println(pointsToSet.possibleTypes());
  SootClass sc=Scene.v().getSootClass(originActivityParameterLocal.getType().toString());
  if (sc.isInterface()) {
    invoke=Jimple.v().newInterfaceInvokeExpr(originActivityParameterLocal,method.makeRef(),args);
  }
 else {
    invoke=Jimple.v().newVirtualInvokeExpr(originActivityParameterLocal,method.makeRef(),args);
  }
  Unit onActivityResultCall=(Unit)Jimple.v().newInvokeStmt(invoke);
  b.getUnits().add(originActivityParameterU);
  b.getUnits().add(intentParameterU);
  b.getUnits().add(newU);
  b.getUnits().add(initU);
  b.getUnits().add(callU);
  b.getUnits().add(nullarIntentLocalParamU);
  b.getUnits().add(destCompCallU);
  b.getUnits().add(defaultValueParamU1);
  b.getUnits().add(onActivityResultCall);
  b.getUnits().add(Jimple.v().newReturnVoidStmt());
  System.out.println("String_Node_Str" + newSM + "String_Node_Str"+ newSM.retrieveActiveBody());
  return newSM;
}