public void pushOntoStack()

in bytekit-core/src/main/java/com/alibaba/bytekit/asm/binding/FieldBinding.java [38:74]


    public void pushOntoStack(InsnList instructions, BindingContext bindingContext) {
        Type onwerType = owner;
        Type fieldType = type;
        boolean fieldIsStatic = isStatic;
        if (owner == null) {
            onwerType = Type.getObjectType(bindingContext.getMethodProcessor().getOwner());
        }
        // 当type是null里,需要从ClassNode里查找到files,确定type
        MethodProcessor methodProcessor = bindingContext.getMethodProcessor();
        if (fieldType == null) {
            ClassNode classNode = methodProcessor.getClassNode();
            if (classNode == null) {
                throw new IllegalArgumentException(
                        "classNode is null, cann not get owner type. FieldBinding name:" + name);
            }
            FieldNode field = AsmUtils.findField(classNode.fields, name);
            if (field == null) {
                throw new IllegalArgumentException("can not find field in ClassNode. FieldBinding name:" + name);
            }
            fieldType = Type.getType(field.desc);
            if ((field.access & Opcodes.ACC_STATIC) != 0) {
                fieldIsStatic = true;
            }else {
                fieldIsStatic = false;
            }
        }

        if (fieldIsStatic) {
            AsmOpUtils.getStatic(instructions, onwerType, name, fieldType);
        } else {
            methodProcessor.loadThis(instructions);
            AsmOpUtils.getField(instructions, onwerType, name, fieldType);
        }
        if (box) {
            AsmOpUtils.box(instructions, fieldType);
        }
    }