Frame<BasicValue> () { Frame<BasicValue> frame = new Frame<>(methodNode.maxLocals, methodNode.maxStack); Type returnType = Type.getReturnType(methodNode.desc); BasicValue returnValue = Type.VOID_TYPE.equals(returnType) ? null : new BasicValue(returnType); frame.setReturn(returnValue); Type[] args = Type.getArgumentTypes(methodNode.desc); int local = 0; if ((methodNode.access & Opcodes.ACC_STATIC) == 0) { frame.setLocal(local++, new AbstractValues.NotNullValue(Type.getObjectType(controlFlow.className))); } for (int i = 0; i < args.length; i++) { BasicValue value; if (direction instanceof Direction.ParamIdBasedDirection && ((Direction.ParamIdBasedDirection)direction).paramIndex == i) { value = new AbstractValues.ParamValue(args[i]); } else { value = new AbstractValues.NthParamValue(args[i], i); } frame.setLocal(local++, value); if (args[i].getSize() == 2) { frame.setLocal(local++, BasicValue.UNINITIALIZED_VALUE); } } while (local < methodNode.maxLocals) { frame.setLocal(local++, BasicValue.UNINITIALIZED_VALUE); } return frame; }