package cute.instrument; import soot.SootMethod; import soot.SootMethodRef; import soot.Scene; import soot.util.Chain; import soot.jimple.Stmt; import soot.jimple.Jimple; import soot.jimple.IntConstant; /** * . * User: Koushik Sen (ksen@cs.uiuc.edu) * Date: Nov 7, 2005 * Time: 6:17:06 PM */ public class InstrumentReturnVoidStatement { public static void instrument(SootMethod sm,Stmt s,Chain units, boolean isConcurrent,int lineNo,String mainClass) { if(isConcurrent && sm.getSubSignature().equals("void run()") && Utils.isRunnableSubType(sm.getDeclaringClass())){ SootMethodRef mr = Scene.v().getMethod("<cute.concolic.Call: void endBefore(int)>").makeRef(); units.insertBefore(Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(mr,IntConstant.v(lineNo))),s); } if(sm.getSubSignature().equals("void main(java.lang.String[])") && sm.getDeclaringClass().getName().equals(mainClass)){ SootMethodRef mr = Scene.v().getMethod("<cute.concolic.Call: void endBefore(int)>").makeRef(); units.insertBefore(Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(mr,IntConstant.v(lineNo))),s); } } }