package cute.instrument;
import soot.Value;
import soot.SootMethodRef;
import soot.Scene;
import soot.jimple.Stmt;
import soot.jimple.StringConstant;
import soot.jimple.IntConstant;
import soot.jimple.Jimple;
import soot.util.Chain;
import java.util.LinkedList;
/**
* .
* User: Koushik Sen (ksen@cs.uiuc.edu)
* Date: Nov 7, 2005
* Time: 5:48:59 PM
*/
public class AddCallWithObjectAndString {
public static void instrument(Value v,Chain units,Stmt s,String methodName,boolean before,String sig,int lineNo){
SootMethodRef mr = null;
sig = sig.substring(sig.indexOf(' ')+1);
mr = Scene.v().getMethod("<cute.concolic.Call: void "+methodName+"(java.lang.Object,java.lang.String,int)>").makeRef();
LinkedList args = new LinkedList();
args.addLast(v);
args.addLast(StringConstant.v(sig));
args.addLast(IntConstant.v(lineNo));
if(before){
units.insertBefore(Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(mr,args)),s);
} else {
units.insertAfter(Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(mr,args)),s);
}
}
}