List of usage examples for org.objectweb.asm MethodVisitor visitMethodInsn
public void visitMethodInsn(final int opcode, final String owner, final String name, final String descriptor, final boolean isInterface)
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); } }; }