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

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

Introduction

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

Prototype

@Override
    public void visitMethodInsn(final int opcodeAndSource, final String owner, final String name,
            final String descriptor, final boolean isInterface) 

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;/*w ww. ja v a 2 s  . co m*/
    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;/*from w w w. ja v a2 s .  co 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 ava 2 s  . com
    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) {//from   w ww .jav  a 2  s  . c o  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;
}