Example usage for org.objectweb.asm MethodVisitor visitMethodInsn

List of usage examples for org.objectweb.asm MethodVisitor visitMethodInsn

Introduction

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

Prototype

public void visitMethodInsn(final int opcode, final String owner, final String name, final String descriptor,
        final boolean isInterface) 

Source Link

Document

Visits a method instruction.

Usage

From source file:com.cinnober.msgcodec.blink.BaseByteCodeGenerator.java

License:Open Source License

public static void unbox(MethodVisitor mv, Class<?> javaClass) {
    if (javaClass == Byte.class || javaClass == byte.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Byte", "byteValue", "()B", false);
    } else if (javaClass == Short.class || javaClass == short.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S", false);
    } else if (javaClass == Integer.class || javaClass == int.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
    } else if (javaClass == Long.class || javaClass == long.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
    } else if (javaClass == Float.class || javaClass == float.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false);
    } else if (javaClass == Double.class || javaClass == double.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
    } else if (javaClass == Boolean.class || javaClass == boolean.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false);
    } else if (javaClass == Character.class || javaClass == char.class) {
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Character", "charValue", "()C", false);
    }//from  www.  ja  v a 2 s  .c  o  m
}

From source file:com.cinnober.msgcodec.blink.BaseByteCodeGenerator.java

License:Open Source License

public static void box(MethodVisitor mv, Class<?> javaClass) {
    if (javaClass == Byte.class || javaClass == byte.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false);
    } else if (javaClass == Short.class || javaClass == short.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false);
    } else if (javaClass == Integer.class || javaClass == int.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false);
    } else if (javaClass == Long.class || javaClass == long.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
    } else if (javaClass == Float.class || javaClass == float.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;", false);
    } else if (javaClass == Double.class || javaClass == double.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
    } else if (javaClass == Boolean.class || javaClass == boolean.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;", false);
    } else if (javaClass == Character.class || javaClass == char.class) {
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;", false);
    }/*from w ww.  j  ava2 s. co m*/
}

From source file:com.cinnober.msgcodec.blink.NativeByteCodeGenerator.java

License:Open Source License

@Override
protected void generateWriteStaticGroupForTypeWithId(Schema schema, ClassVisitor cv,
        String genClassInternalName, boolean javaClassCodec) {
    for (GroupDef group : schema.getGroups()) {
        Object groupType = group.getGroupType();
        String groupDescriptor = getTypeDescriptor(groupType, javaClassCodec);
        MethodVisitor mv = cv.visitMethod(ACC_PRIVATE, "writeStaticGroupWithId_" + group.getName(),
                "(Lcom/cinnober/msgcodec/io/ByteSink;" + groupDescriptor + ")V", null,
                new String[] { "java/io/IOException" });
        mv.visitCode();//  www.  j a  v a  2 s .c o  m
        int nextWriteidVar = 3;

        if (group.getId() != -1) {
            // write with id
            mv.visitVarInsn(ALOAD, 1); // out
            mv.visitLdcInsn(group.getId() & 0xffffffffL);
            mv.visitMethodInsn(INVOKESTATIC, blinkOutputIName, "writeUInt64",
                    "(Lcom/cinnober/msgcodec/io/ByteSink;J)V", false);

            // add extension offset (four zero bytes)
            mv.visitVarInsn(ALOAD, 1); // out
            mv.visitInsn(ICONST_0);
            generateEncodeUInt32Value(true, mv);

            mv.visitVarInsn(ALOAD, 0); // this
            mv.visitVarInsn(ALOAD, 1); // out
            mv.visitVarInsn(ALOAD, 2); // obj
            mv.visitMethodInsn(INVOKEVIRTUAL, genClassInternalName, "writeStaticGroup_" + group.getName(),
                    "(Lcom/cinnober/msgcodec/io/ByteSink;" + groupDescriptor + ")V", false);
            mv.visitInsn(RETURN);
        } else {
            // write with id
            mv.visitTypeInsn(NEW, "java/lang/IllegalArgumentException");
            mv.visitInsn(DUP);
            mv.visitLdcInsn("No group id");
            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalArgumentException", "<init>",
                    "(Ljava/lang/String;)V", false);
            mv.visitInsn(ATHROW);
        }

        // end
        mv.visitMaxs(3, nextWriteidVar);
        mv.visitEnd();
    }
}

From source file:com.cinnober.msgcodec.blink.NativeByteCodeGenerator.java

License:Open Source License

@Override
protected void generateEncodeBinaryValue(TypeDef.Binary type, boolean required, MethodVisitor mv) {
    if (Integer.compareUnsigned(type.getMaxSize(), 255) <= 0) {
        // inline
        mv.visitLdcInsn(type.getMaxSize());
        if (required) {
            mv.visitMethodInsn(INVOKESTATIC, blinkOutputIName, "writeInlineBinary",
                    "(Lcom/cinnober/msgcodec/io/ByteSink;[BI)V", false);
        } else {/* ww w. jav  a  2 s.  c  om*/
            mv.visitMethodInsn(INVOKESTATIC, blinkOutputIName, "writeInlineBinaryNull",
                    "(Lcom/cinnober/msgcodec/io/ByteSink;[BI)V", false);
        }
    } else {
        // data area
        // cast bytesink to ByteBuf, set position to data area, etc
        throw new UnsupportedOperationException("Not implemented yet"); // TODO: add support for data area
    }
}

From source file:com.cinnober.msgcodec.blink.NativeByteCodeGenerator.java

License:Open Source License

@Override
protected void generateEncodeStringValue(TypeDef.StringUnicode type, boolean required, MethodVisitor mv) {
    if (Integer.compareUnsigned(type.getMaxSize(), 255) <= 0) {
        // inline
        mv.visitLdcInsn(type.getMaxSize());
        if (required) {
            mv.visitMethodInsn(INVOKESTATIC, blinkOutputIName, "writeInlineStringUTF8",
                    "(Lcom/cinnober/msgcodec/io/ByteSink;Ljava/lang/String;I)V", false);
        } else {/*from w  w w .  j  a  va  2s.  c  o m*/
            mv.visitMethodInsn(INVOKESTATIC, blinkOutputIName, "writeStringUTF8Null",
                    "(Lcom/cinnober/msgcodec/io/ByteSink;Ljava/lang/String;I)V", false);
        }
    } else {
        // data area
        throw new UnsupportedOperationException("Not implemented yet"); // TODO: add support for data area
    }
}

From source file:com.cinnober.msgcodec.blink.NativeByteCodeGenerator.java

License:Open Source License

/**
 * Generate value decoding using the blink input.
 *
 * <p>Defaults to <code>readBinary[Null].</code>
 *
 * @param required true if the field is required, otherwise false.
 * @param mv the method visitor, not null.
 * @see #generateDecodeValue/*w ww  .j av a 2 s . c om*/
 */
@Override
protected void generateDecodeBinaryValue(TypeDef.Binary type, MethodVisitor mv, boolean required) {
    if (Integer.compareUnsigned(type.getMaxSize(), 255) <= 0) {
        // inline
        mv.visitLdcInsn(type.getMaxSize());
        if (required) {
            mv.visitMethodInsn(INVOKESTATIC, blinkInputIName, "readBinary",
                    "(Lcom/cinnober/msgcodec/io/ByteSource;I)[B", false);
        } else {
            mv.visitMethodInsn(INVOKESTATIC, blinkInputIName, "readBinaryNull",
                    "(Lcom/cinnober/msgcodec/io/ByteSource;I)[B", false);
        }
    } else {
        // data area
        throw new UnsupportedOperationException("Not implemented yet"); // TODO: add support for data area
    }
}

From source file:com.cinnober.msgcodec.blink.NativeByteCodeGenerator.java

License:Open Source License

/**
 * Generate value decoding using the blink input.
 *
 * <p>Defaults to <code>readStringUTF8[Null].</code>
 *
 * @param required true if the field is required, otherwise false.
 * @param mv the method visitor, not null.
 * @see #generateDecodeValue/*from www  .  j  a  va2 s.  c  o  m*/
 */
@Override
protected void generateDecodeStringValue(TypeDef.StringUnicode type, MethodVisitor mv, boolean required) {
    if (Integer.compareUnsigned(type.getMaxSize(), 255) <= 0) {
        // inline
        mv.visitLdcInsn(type.getMaxSize());
        if (required) {
            mv.visitMethodInsn(INVOKESTATIC, blinkInputIName, "readInlineStringUTF8",
                    "(Lcom/cinnober/msgcodec/io/ByteSource;I)Ljava/lang/String;", false);
        } else {
            mv.visitMethodInsn(INVOKESTATIC, blinkInputIName, "readInlineStringUTF8Null",
                    "(Lcom/cinnober/msgcodec/io/ByteSource;I)Ljava/lang/String;", false);
        }
    } else {
        // data area
        throw new UnsupportedOperationException("Not implemented yet"); // TODO: add support for data area
    }
}

From source file:com.gargoylesoftware.js.nashorn.internal.codegen.CompilerConstants.java

License:Open Source License

/**
 * Create a call representing an invokespecial to a given method. Don't
 * attempt to look this up at compile time
 *
 * @param className the class name//w w  w .ja  v a 2 s .c  o m
 * @param name      the method name
 * @param desc      the descriptor
 *
 * @return Call representing specified invokespecial call
 */
public static Call specialCallNoLookup(final String className, final String name, final String desc) {
    return new Call(null, className, name, desc) {
        @Override
        MethodEmitter invoke(final MethodEmitter method) {
            return method.invokespecial(className, name, descriptor);
        }

        @Override
        public void invoke(final MethodVisitor mv) {
            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, className, name, desc, false);
        }
    };
}

From source file:com.gargoylesoftware.js.nashorn.internal.codegen.CompilerConstants.java

License:Open Source License

/**
 * Create a call representing an invokestatic to a given method. Don't
 * attempt to look this up at compile time
 *
 * @param className the class name/*www.ja  v a2s  .c  o  m*/
 * @param name      the method name
 * @param desc      the descriptor
 *
 * @return Call representing specified invokestatic call
 */
public static Call staticCallNoLookup(final String className, final String name, final String desc) {
    return new Call(null, className, name, desc) {
        @Override
        MethodEmitter invoke(final MethodEmitter method) {
            return method.invokestatic(className, name, descriptor);
        }

        @Override
        public void invoke(final MethodVisitor mv) {
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, className, name, desc, false);
        }
    };
}

From source file:com.gargoylesoftware.js.nashorn.internal.codegen.CompilerConstants.java

License:Open Source License

/**
 * Create a call representing an invokevirtual to a given method. Don't
 * attempt to look this up at compile time
 *
 * @param clazz  the class//w  w w .j  a va  2 s . c o m
 * @param name   the method name
 * @param rtype  the return type
 * @param ptypes the parameter types
 *
 * @return Call representing specified invokevirtual call
 */
public static Call virtualCallNoLookup(final Class<?> clazz, final String name, final Class<?> rtype,
        final Class<?>... ptypes) {
    return new Call(null, className(clazz), name, methodDescriptor(rtype, ptypes)) {
        @Override
        MethodEmitter invoke(final MethodEmitter method) {
            return method.invokevirtual(className, name, descriptor);
        }

        @Override
        public void invoke(final MethodVisitor mv) {
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, className, name, descriptor, false);
        }
    };
}