Example usage for org.objectweb.asm.tree MethodNode visitVarInsn

List of usage examples for org.objectweb.asm.tree MethodNode visitVarInsn

Introduction

In this page you can find the example usage for org.objectweb.asm.tree MethodNode visitVarInsn.

Prototype

@Override
    public void visitVarInsn(final int opcode, final int var) 

Source Link

Usage

From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java

License:Open Source License

private static MethodNode generateSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {
    MethodNode setter = new MethodNode();
    setter.access = ACC_PUBLIC;//from   www. ja va2  s . c om
    setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class),
            getType(Object.class));
    setter.name = "set";
    setter.exceptions = Collections.emptyList();
    setter.maxLocals = 3;
    setter.maxStack = 2;
    // load target object
    setter.visitVarInsn(ALOAD, 1);
    // cast target object
    setter.visitTypeInsn(CHECKCAST, getInternalName(type));
    // load attribute value
    setter.visitVarInsn(ALOAD, 2);
    // convert attribute value if necessary
    setter.maxStack += CGUtils.adaptToType(setter, smethod.getParameterTypes()[0]);
    // call real setter
    setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(),
            getMethodDescriptor(smethod), false);
    setter.visitInsn(RETURN);
    return setter;
}

From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java

License:Open Source License

private static MethodNode generateLongSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {
    MethodNode setter = new MethodNode();
    setter.access = ACC_PUBLIC;/*  ww w  . ja  v  a2s . c o m*/
    setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class), getType(long.class));
    setter.name = "set";
    setter.exceptions = Collections.emptyList();
    setter.maxLocals = 4;
    setter.maxStack = 3;
    // load target object
    setter.visitVarInsn(ALOAD, 1);
    // cast target object
    setter.visitTypeInsn(CHECKCAST, getInternalName(type));
    // load attribute value
    setter.visitVarInsn(LLOAD, 2);
    // call real setter
    setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(),
            getMethodDescriptor(smethod), false);
    setter.visitInsn(RETURN);
    return setter;
}

From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java

License:Open Source License

private static MethodNode generateDoubleSetter(Class<? extends AbstractBeanEntityBuilder> type,
        Method smethod) {//from  w  w  w  .j  a v  a2 s .co  m
    MethodNode setter = new MethodNode();
    setter.access = ACC_PUBLIC;
    setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class),
            getType(double.class));
    setter.name = "set";
    setter.exceptions = Collections.emptyList();
    setter.maxLocals = 4;
    setter.maxStack = 3;
    // load target object
    setter.visitVarInsn(ALOAD, 1);
    // cast target object
    setter.visitTypeInsn(CHECKCAST, getInternalName(type));
    // load attribute value
    setter.visitVarInsn(DLOAD, 2);
    // call real setter
    setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(),
            getMethodDescriptor(smethod), false);
    setter.visitInsn(RETURN);
    return setter;
}

From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java

License:Open Source License

private static MethodNode generateClearer(Class<? extends AbstractBeanEntityBuilder> type, Method smethod,
        Method cmethod) {// w ww  . j  a  v a 2s . co m
    MethodNode clearer = new MethodNode();
    clearer.access = ACC_PUBLIC;
    clearer.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class));
    clearer.name = "clear";
    clearer.exceptions = Collections.emptyList();
    clearer.maxLocals = 2;
    clearer.maxStack = 1;
    if (cmethod != null) {
        // load target object
        clearer.visitVarInsn(ALOAD, 1);
        // cast to target object type
        clearer.visitTypeInsn(CHECKCAST, getInternalName(type));
        // call clearer method
        clearer.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), cmethod.getName(),
                getMethodDescriptor(cmethod), false);
        clearer.visitInsn(RETURN);
    } else if (!smethod.getParameterTypes()[0].isPrimitive()) {
        // load target object & cast to type
        clearer.visitVarInsn(ALOAD, 1);
        clearer.visitTypeInsn(CHECKCAST, getInternalName(type));
        // load null and call setter
        clearer.visitInsn(ACONST_NULL);
        clearer.maxStack = 2;
        clearer.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(),
                getMethodDescriptor(smethod), false);
        clearer.visitInsn(RETURN);
    } else {
        // no clearer and primitive method, throw unsupported operation exception
        clearer.maxStack = 2;
        clearer.visitTypeInsn(NEW, "java/lang/UnsupportedOperationException");
        clearer.visitInsn(DUP);
        clearer.visitMethodInsn(INVOKESPECIAL, "java/lang/UnsupportedOperationException", "<init>", "()V",
                false);
        clearer.visitInsn(ATHROW);
    }
    return clearer;
}