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

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

Introduction

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

Prototype

@Override
    public void visitInsn(final int opcode) 

Source Link

Usage

From source file:org.jacoco.core.internal.analysis.filter.SyntheticFilterTest.java

License:Open Source License

@Test
public void should_not_filter_synthetic_constructor_containing_default_arguments_in_kotlin_classes() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_SYNTHETIC, "<init>",
            "(IILkotlin/jvm/internal/DefaultConstructorMarker;)V", null, null);
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
    m.visitInsn(Opcodes.NOP);

    filter.filter(m, context, output);//from   w  ww  . ja  v a  2  s  . c  om

    assertIgnored();
}

From source file:org.jacoco.core.internal.analysis.filter.SyntheticFilterTest.java

License:Open Source License

@Test
public void should_not_filter_synthetic_methods_whose_last_argument_is_kotlin_coroutine_continuation() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
            Opcodes.ACC_SYNTHETIC | Opcodes.ACC_STATIC, "example",
            "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", null, null);
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
    m.visitInsn(Opcodes.NOP);

    filter.filter(m, context, output);//from  w  w  w . j ava 2  s  .c om

    assertIgnored();
}

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

License:Open Source License

private static MethodNode generateGetterConstructor() {
    MethodNode cn = new MethodNode();
    cn.name = "<init>";
    cn.desc = "()V";
    cn.access = ACC_PUBLIC;//from w  ww . j av a 2  s  .  co  m
    cn.exceptions = Collections.emptyList();
    cn.maxStack = 1;
    cn.maxLocals = 1;
    // load the instance
    cn.visitVarInsn(ALOAD, 0);
    // call superclass constructor
    cn.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(BeanAttributeGetter.class), "<init>", "()V", false);
    cn.visitInsn(RETURN);
    return cn;
}

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

License:Open Source License

private static MethodNode generateGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
    MethodNode gn = new MethodNode();
    gn.name = "get";
    gn.desc = Type.getMethodDescriptor(Type.getType(Object.class), Type.getType(AbstractBeanEntity.class));
    gn.access = ACC_PUBLIC;/*from w w w.j a v a  2 s . c o m*/
    gn.exceptions = Collections.emptyList();
    Type rt = Type.getReturnType(getter);
    gn.maxLocals = 2;
    gn.maxStack = 1 + rt.getSize();
    gn.visitCode();
    // load the target object from parameter
    gn.visitVarInsn(ALOAD, 1);
    // cast to target object type
    gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
    // call target object method
    gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(),
            Type.getMethodDescriptor(getter), false);
    // convert from primitive to object if necessary
    CGUtils.adaptFromType(gn, getter.getReturnType());
    gn.visitInsn(ARETURN);
    return gn;
}

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

License:Open Source License

private static MethodNode generateLongGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
    MethodNode gn = new MethodNode();
    gn.name = "getLong";
    gn.desc = Type.getMethodDescriptor(Type.LONG_TYPE, Type.getType(AbstractBeanEntity.class));
    gn.access = ACC_PUBLIC;/*from  w w w . j  a v a 2 s.co  m*/
    gn.exceptions = Collections.emptyList();
    gn.maxLocals = 2;
    gn.maxStack = 2;
    gn.visitCode();
    gn.visitVarInsn(ALOAD, 1);
    gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
    gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(),
            Type.getMethodDescriptor(getter), false);
    gn.visitInsn(LRETURN);
    return gn;
}

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

License:Open Source License

private static MethodNode generateDoubleGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) {
    MethodNode gn = new MethodNode();
    gn.name = "getDouble";
    gn.desc = Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.getType(AbstractBeanEntity.class));
    gn.access = ACC_PUBLIC;/*from w w w.  j  a  v a  2 s .  c o m*/
    gn.exceptions = Collections.emptyList();
    gn.maxLocals = 2;
    gn.maxStack = 2;
    gn.visitCode();
    gn.visitVarInsn(ALOAD, 1);
    gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type));
    gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(),
            Type.getMethodDescriptor(getter), false);
    gn.visitInsn(DRETURN);
    return gn;
}

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

License:Open Source License

private static MethodNode generateBeanConstructor(Class<? extends AttrMethod> superclass) {
    MethodNode ctor = new MethodNode();
    ctor.access = ACC_PUBLIC;//from  w  ww  .java2 s.  co  m
    ctor.desc = getMethodDescriptor(VOID_TYPE, getType(TypedName.class));
    ctor.name = "<init>";
    ctor.exceptions = Collections.emptyList();
    ctor.maxLocals = 2;
    ctor.maxStack = 2;
    // load instance ('this')
    ctor.visitVarInsn(ALOAD, 0);
    // load the attribute
    ctor.visitVarInsn(ALOAD, 1);
    // invoke superclass constructor with attribute
    ctor.visitMethodInsn(INVOKESPECIAL, getInternalName(superclass), "<init>", ctor.desc, false);
    ctor.visitInsn(RETURN);
    return ctor;
}

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  w  w  w.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;//w w w .  j a  va  2s.  c  om
    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) {//  www.j a va2  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;
}