Example usage for org.objectweb.asm.tree InsnList add

List of usage examples for org.objectweb.asm.tree InsnList add

Introduction

In this page you can find the example usage for org.objectweb.asm.tree InsnList add.

Prototype

public void add(final InsnList insnList) 

Source Link

Document

Adds the given instructions to the end of this list.

Usage

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addConstructFunction(ClassNode domain, ClassNode mapper) {
    MethodNode mn = new MethodNode(ACC_PUBLIC, "<init>", "()V", null, null);
    InsnList insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false));
    insn.add(new InsnNode(RETURN));
    mapper.methods.add(mn);//w  w w  . j a v  a  2s.  c  o  m
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addMapperValueMethod(ClassNode domain, ClassNode mapper) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperValue(IDataSource)V method...");
    MethodNode mn = new MethodNode(ACC_PUBLIC, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;)L" + domain.name + ";", null, null);
    InsnList insn = mn.instructions;
    insn.add(new TypeInsnNode(NEW, domain.name));
    insn.add(new InsnNode(DUP));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, domain.name, "<init>", "()V", false));
    insn.add(new VarInsnNode(ASTORE, 2));
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, mapper.name, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;L" + domain.name + ";)L" + domain.name + ";", false));
    insn.add(new InsnNode(POP));
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);//from   ww w.j  a va2s .  c  o  m
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperValue(IDataSource)V method done.");

}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private FieldNode addMergeValueMethod(ClassNode domain, ClassNode mapper, boolean findKey) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperValue(IDataSource,V)V method...");
    MethodNode mn = new MethodNode(ACC_PUBLIC, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;L" + domain.name + ";)L" + domain.name + ";", null,
            null);/*w  w w .  ja  v a2s  .  c  o m*/
    InsnList insn = mn.instructions;

    FieldNode fnKey = null;
    for (Object o : domain.fields) {
        FieldNode fn = (FieldNode) o;
        if (!DomainMojoHelper.isValidField(fn))
            continue;
        if (findKey && isKeyField(fn))
            fnKey = fn;
        Item1 mti = MapperToolRegistry.getDataSItem(fn.desc);
        if (DomainMojoHelper.log().isDebugEnabled())
            DomainMojoHelper.log().debug("desc:" + fn.desc + " item:" + mti);
        String s1 = fn.name.substring(0, 1);
        String s2 = fn.name.substring(1);
        String setMethod = "set" + s1.toUpperCase() + s2;
        // field start
        insn.add(new VarInsnNode(ALOAD, 2));
        insn.add(new VarInsnNode(ALOAD, 1));
        insn.add(new LdcInsnNode(fn.name));// aab001

        insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "gemlite/core/internal/domain/IDataSource",
                mti.getMethod, "(Ljava/lang/String;)" + mti.desc, true));

        // Integer prop;
        if (AsmHelper.needTypeConvert(mti.desc, fn.desc))
            AsmHelper.addTypeConvert(insn, mti.desc);
        insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, domain.name, setMethod, "(" + fn.desc + ")V",
                false));
        // field end
    }
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperValue(IDataSource,V)V method done.");

    return fnKey;
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addBridgeMethod(ClassNode domain, ClassNode mapper, String keyClassDesc) {
    // //from w  ww.  j ava 2 s. c o m
    MethodNode mn = new MethodNode(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;Ljava/lang/Object;)Ljava/lang/Object;", null, null);
    InsnList insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(new TypeInsnNode(CHECKCAST, domain.name));
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, mapper.name, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;L" + domain.name + ";)L" + domain.name + ";", false));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);

    // 
    mn = new MethodNode(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;)Ljava/lang/Object;", null, null);
    insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, mapper.name, "mapperValue",
            "(Lgemlite/core/internal/domain/IDataSource;)L" + domain.name + ";", false));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);

    // 
    mn = new MethodNode(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "value2Key",
            "(Ljava/lang/Object;)Ljava/lang/Object;", null, null);
    insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(new TypeInsnNode(CHECKCAST, domain.name));
    keyClassDesc = AsmHelper.toFullName(keyClassDesc);
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, mapper.name, "value2Key",
            "(L" + domain.name + ";)" + keyClassDesc + "", false));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);

    // 
    mn = new MethodNode(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "mapperKey",
            "(Lgemlite/core/internal/domain/IDataSource;)Ljava/lang/Object;", null, null);
    insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 0));
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, mapper.name, "mapperKey",
            "(Lgemlite/core/internal/domain/IDataSource;)" + keyClassDesc + "", false));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addValue2KeyComplex(ClassNode domain, ClassNode mapper, ClassNode key) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add value2key(V)K method, key:" + key.name);
    MethodNode mn = new MethodNode(ACC_PUBLIC, "value2Key", "(L" + domain.name + ";)L" + key.name + ";", null,
            null);//from   www  .j av a  2s  . c om
    InsnList insn = mn.instructions;
    insn.add(new TypeInsnNode(NEW, key.name));
    insn.add(new InsnNode(DUP));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, key.name, "<init>", "()V", false));
    insn.add(new VarInsnNode(ASTORE, 2));

    for (Object o : key.fields) {
        FieldNode fn = (FieldNode) o;
        String s1 = fn.name.substring(0, 1);
        String s2 = fn.name.substring(1);
        String setMethod = "set" + s1.toUpperCase() + s2;
        String getMethod = "get" + s1.toUpperCase() + s2;
        // field start
        insn.add(new VarInsnNode(ALOAD, 2));
        insn.add(new VarInsnNode(ALOAD, 1));
        insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, domain.name, getMethod, "()" + fn.desc, false));
        insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, key.name, setMethod, "(" + fn.desc + ")V", false));
        // field end
    }
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add value2key(V)K method, key:" + key.name + " done.");
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addMapperKeyComplex(ClassNode domain, ClassNode mapper, ClassNode key) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperKey(mapperKey)K method, key:" + key.name);
    MethodNode mn = new MethodNode(ACC_PUBLIC, "mapperKey",
            "(Lgemlite/core/internal/domain/IDataSource;)L" + key.name + ";", null, null);
    InsnList insn = mn.instructions;
    insn.add(new TypeInsnNode(NEW, key.name));
    insn.add(new InsnNode(DUP));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, key.name, "<init>", "()V", false));
    insn.add(new VarInsnNode(ASTORE, 2));
    for (Object o : key.fields) {
        FieldNode fn = (FieldNode) o;/*from  w  w  w.j a  va  2s .  co m*/
        if (!DomainMojoHelper.isValidField(fn))
            continue;

        Item1 mti = MapperToolRegistry.getDataSItem(fn.desc);
        String s1 = fn.name.substring(0, 1);
        String s2 = fn.name.substring(1);
        String setMethod = "set" + s1.toUpperCase() + s2;
        // field start
        insn.add(new VarInsnNode(ALOAD, 2));
        insn.add(new VarInsnNode(ALOAD, 1));
        insn.add(new LdcInsnNode(fn.name));// aab001
        insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "gemlite/core/internal/domain/IDataSource",
                mti.getMethod, "(Ljava/lang/String;)" + fn.desc, true));
        insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, key.name, setMethod, "(" + fn.desc + ")V", false));
        // field end
    }
    insn.add(new VarInsnNode(ALOAD, 2));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperKey(mapperKey)K method, key:" + key.name + " done.");
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addValue2KeySimple(ClassNode domain, ClassNode mapper, FieldNode key) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add value2key(V)K method, key field:" + key.name);
    String s1 = key.name.substring(0, 1);
    String s2 = key.name.substring(1);
    String getMethod = "get" + s1.toUpperCase() + s2;
    String fullDesc = AsmHelper.toFullName(key.desc);
    MethodNode mn = new MethodNode(ACC_PUBLIC, "value2Key", "(L" + domain.name + ";)" + fullDesc, null, null);
    InsnList insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(AsmHelper.newMethodInsnNode(INVOKEVIRTUAL, domain.name, getMethod, "()" + key.desc, false));
    AsmHelper.addTypeConvert(insn, key.desc);
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);//  w  ww  . j a va 2  s. c  o  m
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add value2key(V)K method, key field:" + key.name + " done.");
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addMapperKeySimple(ClassNode mapper, FieldNode key) {
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperKey(IDataSource)K method, key field:" + key.name);
    String fullDesc = AsmHelper.toFullName(key.desc);
    MethodNode mn = new MethodNode(ACC_PUBLIC, "mapperKey",
            "(Lgemlite/core/internal/domain/IDataSource;)" + fullDesc, null, null);
    InsnList insn = mn.instructions;
    insn.add(new VarInsnNode(ALOAD, 1));
    insn.add(new LdcInsnNode(key.name));

    Item1 mti = MapperToolRegistry.getDataSItem(key.desc);
    insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "gemlite/core/internal/domain/IDataSource",
            mti.getMethod, "(Ljava/lang/String;)" + key.desc, true));
    AsmHelper.addTypeConvert(insn, key.desc);
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);//from   ww  w .j av  a2  s  .co  m
    if (DomainMojoHelper.log().isDebugEnabled())
        DomainMojoHelper.log().debug("Add mapperKey(IDataSource)K method, key field:" + key.name);
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addFieldNames(ClassNode domain, ClassNode mapper, ClassNode kcn, FieldNode kfn) {
    // ???fieldNames
    MethodNode mn = new MethodNode(ACC_STATIC, "<clinit>", "()V", null, null);
    InsnList insn = mn.instructions;
    // new valueFieldNames
    insn.add(new TypeInsnNode(NEW, "java/util/ArrayList"));
    insn.add(new InsnNode(DUP));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", false));
    insn.add(new FieldInsnNode(PUTSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;"));
    // new keyFieldNames
    insn.add(new TypeInsnNode(NEW, "java/util/ArrayList"));
    insn.add(new InsnNode(DUP));
    insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", false));
    insn.add(new FieldInsnNode(PUTSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;"));
    // value fields
    for (Object o : domain.fields) {
        FieldNode fn = (FieldNode) o;/* ww  w  .  j  a  v a  2 s  .c  o m*/
        if (!DomainMojoHelper.isValidField(fn))
            continue;

        insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;"));
        insn.add(new LdcInsnNode(fn.name));
        insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z",
                true));
        insn.add(new InsnNode(POP));
    }
    // key fields
    if (kcn != null) {
        for (Object o : kcn.fields) {
            FieldNode fn = (FieldNode) o;
            insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;"));
            insn.add(new LdcInsnNode(fn.name));
            insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add",
                    "(Ljava/lang/Object;)Z", true));
            insn.add(new InsnNode(POP));
        }
    } else {
        insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;"));
        insn.add(new LdcInsnNode(kfn.name));
        insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z",
                true));
        insn.add(new InsnNode(POP));
    }

    insn.add(new InsnNode(RETURN));
    mapper.methods.add(mn);

    // fieldNames ????
    FieldNode fnFieldNames = new FieldNode(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "valueFieldNames",
            "Ljava/util/List;", "Ljava/util/List<Ljava/lang/String;>;", null);
    mapper.fields.add(fnFieldNames);
    fnFieldNames = new FieldNode(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "keyFieldNames", "Ljava/util/List;",
            "Ljava/util/List<Ljava/lang/String;>;", null);
    mapper.fields.add(fnFieldNames);

    // getFieldNames
    mn = new MethodNode(ACC_PUBLIC, "getValueFieldNames", "()Ljava/util/List;",
            "()Ljava/util/List<Ljava/lang/String;>;", null);
    insn = mn.instructions;
    insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;"));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
    // getKeyFieldNames
    mn = new MethodNode(ACC_PUBLIC, "getKeyFieldNames", "()Ljava/util/List;",
            "()Ljava/util/List<Ljava/lang/String;>;", null);
    insn = mn.instructions;
    insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;"));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
}

From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java

License:Apache License

private void addKeyValueTypeMethod(ClassNode domain, ClassNode mapper, String keyClassDesc) {
    keyClassDesc = AsmHelper.toFullName(keyClassDesc);
    MethodNode mn = new MethodNode(ACC_PUBLIC, "getKeyClass", "()Ljava/lang/Class;",
            "()Ljava/lang/Class<" + keyClassDesc + ">;", null);
    InsnList insn = mn.instructions;
    insn.add(new LdcInsnNode(Type.getType(keyClassDesc)));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);/*w  w w .j  a  v a 2 s  .c o m*/

    String valueClassDesc = "L" + domain.name + ";";
    mn = new MethodNode(ACC_PUBLIC, "getValueClass", "()Ljava/lang/Class;",
            "()Ljava/lang/Class<" + valueClassDesc + ">;", null);
    insn = mn.instructions;
    insn.add(new LdcInsnNode(Type.getType(valueClassDesc)));
    insn.add(new InsnNode(ARETURN));
    mapper.methods.add(mn);
}