public Instruction execute(SystemState ss, KernelState ks, ThreadInfo ti) { if (!ti.isFirstStepInsn()) { InvocationCG cg = new InvocationCG("INVOKECG", invokes); ss.setNextChoiceGenerator(cg); return this; } else { InvocationCG cg = ss.getCurrentChoiceGenerator("INVOKECG", InvocationCG.class); assert (cg != null) : "no current InvocationCG"; Invocation call = cg.getNextChoice(); MethodInfo callee = call.getMethodInfo(); InstructionFactory insnFactory = MethodInfo.getInstructionFactory(); if (callee.isStatic()) { realInvoke = (InvokeInstruction) insnFactory.create(null, Constants.INVOKESTATIC); } else { realInvoke = (InvokeInstruction) insnFactory.create(null, Constants.INVOKENONVIRTUAL); } realInvoke.init(mi, offset, position); realInvoke.setInvokedMethod( callee.getClassInfo().getName(), callee.getName(), callee.getSignature()); pushArguments(ti, call.getArguments(), call.getAttrs()); return realInvoke; } }