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

@Deprecated
public void visitMethodInsn(final int opcode, final String owner, final String name, final String descriptor) 

Source Link

Document

Visits a method instruction.

Usage

From source file:com.nginious.http.serialize.JsonSerializerCreator.java

License:Apache License

/**
 * Creates bytecode for serializing a bean property which is in itself a serializable bean as defined in the class description.
 * /*from   ww  w .  ja  v  a  2s. com*/
 * @param visitor method visitor used for creating bytecode
 * @param returnMethodName binary name of get method in bean that returns serializable bean
 * @param returnType class of serializable bean
 * @param intBeanClazzName binary class name of bean
 */
private void createBeanSerializationCode(MethodVisitor visitor, String returnMethodName, String propertyName,
        Class<?> returnType, String intBeanClazzName) {
    String intReturnClazzName = Serialization.createInternalClassName(returnType);
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/JsonSerializer",
            "getSerializerFactory", "()Lcom/nginious/http/serialize/SerializerFactoryImpl;");
    visitor.visitLdcInsn(returnType.getName());
    visitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Class", "forName",
            "(Ljava/lang/String;)Ljava/lang/Class;");

    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/SerializerFactoryImpl",
            "createJsonSerializer", "(Ljava/lang/Class;)Lcom/nginious/http/serialize/JsonSerializer;");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);

    visitor.visitVarInsn(Opcodes.ALOAD, 4);
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, intBeanClazzName, returnMethodName,
            "()L" + intReturnClazzName + ";");
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/JsonSerializer", "serialize",
            "(Ljava/lang/Object;)Lorg/json/JSONObject;");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);

    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    visitor.visitLdcInsn(propertyName);
    visitor.visitVarInsn(Opcodes.ALOAD, 4);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "org/json/JSONObject", "put",
            "(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;");
}

From source file:com.nginious.http.serialize.JsonSerializerCreator.java

License:Apache License

/**
 * Creates bytecode for serializing property matching the specified bean method name. The generated bytecode calls the
 * appropriate serialization method in the class {@link JsonSerializer} depending on the specified method type.
 * //  w ww . j  a v a 2  s .  c  om
 * @param visitor method visitor for generating bytecode
 * @param clazzName binary name of serializer class being generated
 * @param methodName binary name of method in class {@link JsonSerializer} used for serializing property
 * @param methodType binary type for method in class {@link JsonSerializer} used for serializing property
 * @param beanType binary return type of get method in bean
 * @param beanClazzName binary name of bean class
 * @param beanMethodName binary name of get method in bean for getting method
 */
private void createPropertySerializationCode(MethodVisitor visitor, String clazzName, String methodName,
        String methodType, String beanType, String beanClazzName, String beanMethodName, String propertyName) {
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    visitor.visitLdcInsn(propertyName);
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, beanClazzName, beanMethodName, "()" + beanType);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, clazzName, methodName,
            "(Lorg/json/JSONObject;Ljava/lang/String;" + methodType + ")V");
}

From source file:com.nginious.http.serialize.QueryDeserializerCreator.java

License:Apache License

/**
 * Creates bytecode for deserializing property matching the specified bean method name. The generated bytecode calls the
 * appropriate deserialization method in the class {@link QueryDeserializer} depending on the specified method type.
 * Then generated bytecode that calls the corresponding get method in the bean class. 
 * //from   w ww.j a  va2  s .  c o  m
 * @param visitor method visitor for writing bytecode
 * @param clazzName binary name of class being generated
 * @param methodName binary name of method in class {@link QueryDeserializer} used for deserializing property
 * @param methodType binary type of value returned by called deserialization method in {@link QueryDeserializer}
 * @param beanType binary type for argument in bean method for setting property
 * @param beanClazzName binary class name of bean for which the deserializer class is being generated
 * @param beanMethodName binary name of method in bean class for setting property
 */
private void createPropertyDeserializationCode(MethodVisitor visitor, String clazzName, String methodName,
        String methodType, String beanType, String beanClazzName, String beanMethodName) {
    String propertyName = createParameterNameFromMethodName(beanMethodName);
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    visitor.visitLdcInsn(propertyName);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, clazzName, methodName,
            "(Lcom/nginious/http/HttpRequest;Ljava/lang/String;)" + methodType);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, beanClazzName, beanMethodName, "(" + beanType + ")V");
}

From source file:com.nginious.http.serialize.QueryDeserializerCreator.java

License:Apache License

/**
 * Creates bytecode which implements the {@link QueryDeserializer#deserialize(se.netdigital.http.HttpRequest)} method for
 * the deserializer class being created.
 * /*from  w  w w .  ja  v a2 s . com*/
 * @param writer class byte code writer
 * @param intBeanClazzName name of deserializer class being generated
 * @return a method visitor for writing bytecode inside the generated method
 */
private MethodVisitor createDeserializeMethod(ClassWriter writer, String intBeanClazzName) {
    String[] exceptions = { "com/nginious/serialize/SerializerException" };
    MethodVisitor visitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "deserialize",
            "(Lcom/nginious/http/HttpRequest;)Ljava/lang/Object;", null, exceptions);
    visitor.visitCode();

    visitor.visitTypeInsn(Opcodes.NEW, intBeanClazzName);
    visitor.visitInsn(Opcodes.DUP);
    visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, intBeanClazzName, "<init>", "()V");
    visitor.visitVarInsn(Opcodes.ASTORE, 3);
    return visitor;
}

From source file:com.nginious.http.serialize.Serialization.java

License:Apache License

/**
 * Creates bytecode for a no argument constructor. The created bytecode also calls the no argument constructor
 * in the superclass with the specified name.
 * //w  w w  .  j a v a2s  . c o  m
 * @param writer bytecode writer
 * @param superclassName binary name of superclass
 */
static void createConstructor(ClassWriter writer, String superclassName) {
    MethodVisitor visitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
    visitor.visitCode();
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, superclassName, "<init>", "()V");
    visitor.visitInsn(Opcodes.RETURN);
    visitor.visitMaxs(1, 1);
    visitor.visitEnd();
}

From source file:com.nginious.http.serialize.XmlDeserializerCreator.java

License:Apache License

/**
 * Creates bytecode for deserializing property matching the specified bean method name. The generated bytecode calls the
 * appropriate deserialization method in the class {@link XmlDeserializer} depending on the specified method type.
 * Then generated bytecode that calls the corresponding set method in the bean class. 
 * /*from  w  w  w. j av  a 2 s.  c o  m*/
 * @param visitor method visitor for writing bytecode
 * @param clazzName binary name of class being generated
 * @param methodName binary name of method in class {@link XmlDeserializer} used for deserializing property
 * @param methodType binary type of value returned by called deserialization method in {@link XmlDeserializer}
 * @param beanType binary type for argument in bean method for setting property
 * @param beanClazzName binary class name of bean for which the deserializer class is being generated
 * @param beanMethodName binary name of method in bean class for setting property
 */
private void createPropertyDeserializationCode(MethodVisitor visitor, String clazzName, String methodName,
        String methodType, String beanType, String beanClazzName, String beanMethodName) {
    String propertyName = convertToXmlName(beanMethodName);
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    visitor.visitLdcInsn(propertyName);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, clazzName, methodName,
            "(Ljava/util/HashMap;Ljava/lang/String;)" + methodType);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, beanClazzName, beanMethodName, "(" + beanType + ")V");
}

From source file:com.nginious.http.serialize.XmlDeserializerCreator.java

License:Apache License

/**
 * Creates bytecode which implements the {@link XmlDeserializer#deserialize(java.util.HashMap)} method for
 * the deserializer class being created.
 * /*from w ww .ja  va2 s  . c o  m*/
 * @param writer class byte code writer
 * @param intBeanClazzName name of deserializer class being generated
 * @return a method visitor for writing bytecode inside the generated method
 */
private MethodVisitor createDeserializeMethod(ClassWriter writer, String intBeanClazzName) {
    String[] exceptions = { "com/nginious/http/serialize/SerializerException" };
    MethodVisitor visitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "deserialize",
            "(Ljava/util/HashMap;)Ljava/lang/Object;", null, exceptions);
    visitor.visitCode();

    visitor.visitTypeInsn(Opcodes.NEW, intBeanClazzName);
    visitor.visitInsn(Opcodes.DUP);
    visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, intBeanClazzName, "<init>", "()V");
    visitor.visitVarInsn(Opcodes.ASTORE, 3);
    return visitor;
}

From source file:com.nginious.http.serialize.XmlSerializerCreator.java

License:Apache License

/**
 * Creates bytecode for serializing a bean property which returns a collection of opaque objects.
 * //  w ww .java2s . com
 * @param visitor method visitor used for creating bytecode
 * @param intBeanClazzName binary name of bean
 * @param methodName binary name of get method in bean
 * @param returnType return type of get method in bean
 */
private void createObjectCollectionSerializationCode(MethodVisitor visitor, String intBeanClazzName,
        String methodName, String propertyName, Class<?> returnType) {
    visitor.visitTypeInsn(Opcodes.NEW, "com/nginious/http/serialize/XmlObjectCollectionSerializer");
    visitor.visitInsn(Opcodes.DUP);
    visitor.visitLdcInsn(propertyName);
    visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "com/nginious/http/serialize/XmlObjectCollectionSerializer",
            "<init>", "(Ljava/lang/String;)V");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);

    visitor.visitVarInsn(Opcodes.ALOAD, 4);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    String intReturnClazzName = returnType.getName().replace('.', '/');
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, intBeanClazzName, methodName,
            "()L" + intReturnClazzName + ";");

    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/XmlObjectCollectionSerializer",
            "serialize", "(Ljavax/xml/transform/sax/TransformerHandler;Ljava/util/Collection;)V");
}

From source file:com.nginious.http.serialize.XmlSerializerCreator.java

License:Apache License

/**
 * Creates bytecode for serializing a bean property which returns a collection of beans that are serializable. Bean serializability
 * is determined as described in the class description.
 * //from w w  w .j  a  va  2s .  c  om
 * @param visitor method visitor used for creating bytecode
 * @param intBeanClazzName binary class name of bean
 * @param methodName binary name of get method in bean returning collection
 * @param returnType return type of get method in bean
 * @param collectionBeanType class of serializable bean found in collection
 */
private void createBeanCollectionSerializationCode(MethodVisitor visitor, String intBeanClazzName,
        String methodName, String propertyName, Class<?> returnType, Class<?> collectionBeanType) {
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/XmlSerializer",
            "getSerializerFactory", "()Lcom/nginious/http/serialize/SerializerFactoryImpl;");
    visitor.visitLdcInsn(collectionBeanType.getName());
    visitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Class", "forName",
            "(Ljava/lang/String;)Ljava/lang/Class;");
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/SerializerFactoryImpl",
            "createXmlSerializer", "(Ljava/lang/Class;)Lcom/nginious/http/serialize/XmlSerializer;");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);

    visitor.visitTypeInsn(Opcodes.NEW, "com/nginious/http/serialize/XmlBeanCollectionSerializer");
    visitor.visitInsn(Opcodes.DUP);
    visitor.visitLdcInsn(propertyName);
    visitor.visitVarInsn(Opcodes.ALOAD, 4);
    visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "com/nginious/http/serialize/XmlBeanCollectionSerializer",
            "<init>", "(Ljava/lang/String;Lcom/nginious/http/serialize/XmlSerializer;)V");
    visitor.visitVarInsn(Opcodes.ASTORE, 5);

    visitor.visitVarInsn(Opcodes.ALOAD, 5);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);

    String intReturnClazzName = returnType.getName().replace('.', '/');
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, intBeanClazzName, methodName,
            "()L" + intReturnClazzName + ";");

    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/XmlBeanCollectionSerializer",
            "serialize", "(Ljavax/xml/transform/sax/TransformerHandler;Ljava/util/Collection;)V");
}

From source file:com.nginious.http.serialize.XmlSerializerCreator.java

License:Apache License

/**
 * Creates bytecode for serializing a bean property which is in itself a serializable bean as defined in the class description.
 * //from   w w  w .  j a  v  a  2 s .  c o m
 * @param visitor method visitor used for creating bytecode
 * @param returnMethodName binary name of get method in bean that returns serializable bean
 * @param returnType class of serializable bean
 * @param intBeanClazzName binary class name of bean
 */
private void createBeanSerializationCode(MethodVisitor visitor, String returnMethodName, String propertyName,
        Class<?> returnType, String intBeanClazzName) {
    String intReturnClazzName = Serialization.createInternalClassName(returnType);
    visitor.visitVarInsn(Opcodes.ALOAD, 0);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/XmlSerializer",
            "getSerializerFactory", "()Lcom/nginious/http/serialize/SerializerFactoryImpl;");
    visitor.visitLdcInsn(returnType.getName());
    visitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Class", "forName",
            "(Ljava/lang/String;)Ljava/lang/Class;");

    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/SerializerFactoryImpl",
            "createXmlSerializer", "(Ljava/lang/Class;)Lcom/nginious/http/serialize/XmlSerializer;");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);

    visitor.visitVarInsn(Opcodes.ALOAD, 4);
    visitor.visitVarInsn(Opcodes.ALOAD, 1);
    visitor.visitLdcInsn(convertToXmlName(propertyName));
    visitor.visitVarInsn(Opcodes.ALOAD, 3);
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, intBeanClazzName, returnMethodName,
            "()L" + intReturnClazzName + ";");
    visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "com/nginious/http/serialize/XmlSerializer", "serialize",
            "(Ljavax/xml/transform/sax/TransformerHandler;Ljava/lang/String;Ljava/lang/Object;)V");
    visitor.visitVarInsn(Opcodes.ASTORE, 4);
}