Example usage for org.objectweb.asm Opcodes ASTORE

List of usage examples for org.objectweb.asm Opcodes ASTORE

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes ASTORE.

Prototype

int ASTORE

To view the source code for org.objectweb.asm Opcodes ASTORE.

Click Source Link

Usage

From source file:scouter.agent.asm.CapArgsASM.java

License:Apache License

@Override
public void visitCode() {

    int sidx = isStatic ? 0 : 1;

    int arrVarIdx = newLocal(Type.getType("[Ljava/lang/Object;"));
    AsmUtil.PUSH(mv, paramTypes.length);
    mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
    mv.visitVarInsn(Opcodes.ASTORE, arrVarIdx);

    for (int i = 0; i < paramTypes.length; i++) {
        Type type = paramTypes[i];
        mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);
        AsmUtil.PUSH(mv, i);/*from   w w  w  .j  a v  a 2s  .  c  o  m*/

        switch (type.getSort()) {
        case Type.BOOLEAN:
            mv.visitVarInsn(Opcodes.ILOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
                    false);
            break;
        case Type.BYTE:
            mv.visitVarInsn(Opcodes.ILOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false);
            break;
        case Type.CHAR:
            mv.visitVarInsn(Opcodes.ILOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Character", "valueOf",
                    "(C)Ljava/lang/Character;", false);
            break;
        case Type.SHORT:
            mv.visitVarInsn(Opcodes.ILOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;",
                    false);
            break;
        case Type.INT:
            mv.visitVarInsn(Opcodes.ILOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;",
                    false);
            break;
        case Type.LONG:
            mv.visitVarInsn(Opcodes.LLOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
            break;
        case Type.FLOAT:
            mv.visitVarInsn(Opcodes.FLOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;",
                    false);
            break;
        case Type.DOUBLE:
            mv.visitVarInsn(Opcodes.DLOAD, sidx);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;",
                    false);
            break;
        default:
            mv.visitVarInsn(Opcodes.ALOAD, sidx);
        }
        mv.visitInsn(Opcodes.AASTORE);
        sidx += type.getSize();
    }
    AsmUtil.PUSH(mv, className);
    AsmUtil.PUSH(mv, methodName);
    AsmUtil.PUSH(mv, methodDesc);
    if (isStatic) {
        AsmUtil.PUSHNULL(mv);
    } else {
        mv.visitVarInsn(Opcodes.ALOAD, 0);
    }
    mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, CLASS, METHOD, SIGNATURE, false);
    mv.visitCode();
}

From source file:scouter.agent.asm.CapReturnASM.java

License:Apache License

private void capReturn() {
    Type tp = returnType;//from   w  w w .ja  v  a 2s.c  om

    if (tp == null || tp.equals(Type.VOID_TYPE)) {
        pushCommon();
        mv.visitInsn(ACONST_NULL);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CLASS, METHOD, SIGNATURE, false);
        return;
    }
    int i = newLocal(tp);
    switch (tp.getSort()) {
    case Type.BOOLEAN:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
                false);
        break;
    case Type.BYTE:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false);
        break;
    case Type.CHAR:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;",
                false);
        break;
    case Type.SHORT:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false);
        break;
    case Type.INT:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;",
                false);
        break;
    case Type.LONG:
        mv.visitVarInsn(Opcodes.LSTORE, i);
        mv.visitVarInsn(Opcodes.LLOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.LLOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        break;
    case Type.FLOAT:
        mv.visitVarInsn(Opcodes.FSTORE, i);
        mv.visitVarInsn(Opcodes.FLOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.FLOAD, i);

        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;", false);
        break;
    case Type.DOUBLE:
        mv.visitVarInsn(Opcodes.DSTORE, i);
        mv.visitVarInsn(Opcodes.DLOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.DLOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
        break;
    default:
        mv.visitVarInsn(Opcodes.ASTORE, i);
        mv.visitVarInsn(Opcodes.ALOAD, i);

        pushCommon();
        mv.visitVarInsn(Opcodes.ALOAD, i);
    }

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, CLASS, METHOD, SIGNATURE, false);
}

From source file:scouter.agent.asm.HttpServiceASM.java

License:Apache License

@Override
public void visitCode() {
    mv.visitVarInsn(Opcodes.ALOAD, 1);// ww  w  .j a  va2  s .co m
    mv.visitVarInsn(Opcodes.ALOAD, 2);
    if (httpservlet) {
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, START_SERVICE, START_SIGNATURE, false);
    } else {
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, START_FILTER, START_SIGNATURE, false);
    }
    statIdx = newLocal(Type.getType(Object.class));
    mv.visitVarInsn(Opcodes.ASTORE, statIdx);
    mv.visitLabel(startFinally);
    mv.visitVarInsn(Opcodes.ALOAD, statIdx);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitVarInsn(Opcodes.ALOAD, 2);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, REJECT, REJECT_SIGNATURE, false);
    Label end = new Label();
    mv.visitJumpInsn(IFNULL, end);
    mv.visitInsn(Opcodes.RETURN);
    mv.visitLabel(end);
    mv.visitCode();
}

From source file:scouter.agent.asm.HttpServiceASM.java

License:Apache License

@Override
public void visitMaxs(int maxStack, int maxLocals) {
    Label endFinally = new Label();
    mv.visitTryCatchBlock(startFinally, endFinally, endFinally, null);
    mv.visitLabel(endFinally);/*from   w  w w  . j av  a2 s. co  m*/
    mv.visitInsn(DUP);
    int errIdx = newLocal(Type.getType(Throwable.class));
    mv.visitVarInsn(Opcodes.ASTORE, errIdx);
    mv.visitVarInsn(Opcodes.ALOAD, statIdx);
    mv.visitVarInsn(Opcodes.ALOAD, errIdx);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, END_METHOD, END_SIGNATURE, false);
    mv.visitInsn(ATHROW);
    mv.visitMaxs(maxStack + 8, maxLocals + 2);
}

From source file:scouter.agent.asm.InitialContextASM.java

License:Apache License

private void code() {
    int i = newLocal(returnType);

    mv.visitVarInsn(Opcodes.ASTORE, i);
    mv.visitVarInsn(Opcodes.ALOAD, i);/*from ww w.ja v  a 2s. c  o m*/

    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, i);

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, CLASS, METHOD, SIGNATURE, false);
}

From source file:scouter.agent.asm.jdbc.PsExecuteMV.java

License:Apache License

@Override
public void visitCode() {
    mv.visitVarInsn(ALOAD, 0);/*ww  w. jav  a  2  s. c o m*/
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, owner, TraceSQL.PSTMT_PARAM_FIELD, "Lscouter/agent/trace/SqlParameter;");
    AsmUtil.PUSH(mv, this.methodType);

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, START_METHOD, START_SIGNATURE, false);

    statIdx = newLocal(Type.getType(Object.class));
    mv.visitVarInsn(Opcodes.ASTORE, statIdx);
    mv.visitLabel(startFinally);
    mv.visitCode();
}

From source file:scouter.agent.asm.jdbc.PsExecuteMV.java

License:Apache License

@Override
public void visitInsn(int opcode) {
    if ((opcode >= IRETURN && opcode <= RETURN)) {
        int lvPosReturn;
        switch (returnType.getSort()) {
        case Type.ARRAY:
            if (returnType.getElementType().getSort() == Type.INT) {
                lvPosReturn = newLocal(returnType);
                mv.visitVarInsn(Opcodes.ASTORE, lvPosReturn);
                mv.visitVarInsn(Opcodes.ALOAD, lvPosReturn);

                mv.visitVarInsn(Opcodes.ALOAD, statIdx);
                mv.visitInsn(Opcodes.ACONST_NULL);
                mv.visitVarInsn(Opcodes.ALOAD, lvPosReturn);
                mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, "getIntArraySum", "([I)I", false);

            } else {
                mv.visitVarInsn(Opcodes.ALOAD, statIdx);
                mv.visitInsn(Opcodes.ACONST_NULL);
                AsmUtil.PUSH(mv, -1);/*  w  w  w.  jav a2  s  .  c o  m*/
            }
            break;
        case Type.BOOLEAN:
        case Type.INT:
            lvPosReturn = newLocal(returnType);
            mv.visitVarInsn(Opcodes.ISTORE, lvPosReturn);
            mv.visitVarInsn(Opcodes.ILOAD, lvPosReturn);

            mv.visitVarInsn(Opcodes.ALOAD, statIdx);
            mv.visitInsn(Opcodes.ACONST_NULL);
            mv.visitVarInsn(Opcodes.ILOAD, lvPosReturn);

            if (returnType.getSort() == Type.BOOLEAN) {
                mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, "toInt", "(Z)I", false);
            }
            break;
        default:
            mv.visitVarInsn(Opcodes.ALOAD, statIdx);
            mv.visitInsn(Opcodes.ACONST_NULL);
            AsmUtil.PUSH(mv, -1);
        }
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, END_METHOD, END_SIGNATURE, false);
    }
    mv.visitInsn(opcode);
}

From source file:scouter.agent.asm.jdbc.PsExecuteMV.java

License:Apache License

@Override
public void visitMaxs(int maxStack, int maxLocals) {
    Label endFinally = new Label();
    mv.visitTryCatchBlock(startFinally, endFinally, endFinally, null);
    mv.visitLabel(endFinally);// w  ww  . j a v a  2  s . c om
    mv.visitInsn(DUP);
    int errIdx = newLocal(Type.getType(Throwable.class));
    mv.visitVarInsn(Opcodes.ASTORE, errIdx);

    mv.visitVarInsn(Opcodes.ALOAD, statIdx);
    mv.visitVarInsn(Opcodes.ALOAD, errIdx);
    AsmUtil.PUSH(mv, -3);

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, END_METHOD, END_SIGNATURE, false);
    mv.visitInsn(ATHROW);
    mv.visitMaxs(maxStack + 8, maxLocals + 2);
}

From source file:scouter.agent.asm.jdbc.StExecuteMV.java

License:Apache License

@Override
public void visitCode() {
    mv.visitVarInsn(ALOAD, 0);/* w w  w. ja  v a  2s.c  om*/
    mv.visitVarInsn(ALOAD, 1);
    AsmUtil.PUSH(mv, this.methodType);

    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, START_METHOD, START_SIGNATURE, false);

    statIdx = newLocal(Type.getType(Object.class));
    mv.visitVarInsn(Opcodes.ASTORE, statIdx);
    mv.visitLabel(startFinally);
    mv.visitCode();
}

From source file:scouter.agent.asm.jdbc.StExecuteMV.java

License:Apache License

@Override
public void visitInsn(int opcode) {
    if ((opcode >= IRETURN && opcode <= RETURN)) {
        int lvPosReturn;
        switch (returnType.getSort()) {
        case Type.ARRAY:
            if (returnType.getElementType().getSort() == Type.INT) {

                lvPosReturn = newLocal(returnType);
                mv.visitVarInsn(Opcodes.ASTORE, lvPosReturn);
                mv.visitVarInsn(Opcodes.ALOAD, lvPosReturn);

                mv.visitVarInsn(Opcodes.ALOAD, statIdx);
                mv.visitInsn(Opcodes.ACONST_NULL);
                mv.visitVarInsn(Opcodes.ALOAD, lvPosReturn);
                mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, "getIntArraySum", "([I)I", false);

            } else {
                mv.visitVarInsn(Opcodes.ALOAD, statIdx);
                mv.visitInsn(Opcodes.ACONST_NULL);
                AsmUtil.PUSH(mv, -1);/*from ww  w . j ava2  s.c  o  m*/
            }
            break;
        case Type.BOOLEAN:
        case Type.INT:
            int i = newLocal(returnType);
            mv.visitVarInsn(Opcodes.ISTORE, i);
            mv.visitVarInsn(Opcodes.ILOAD, i);

            mv.visitVarInsn(Opcodes.ALOAD, statIdx);
            mv.visitInsn(Opcodes.ACONST_NULL);

            mv.visitVarInsn(Opcodes.ILOAD, i);

            if (returnType.getSort() == Type.BOOLEAN) {
                mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, "toInt", "(Z)I", false);
            }
            break;
        default:
            mv.visitVarInsn(Opcodes.ALOAD, statIdx);
            mv.visitInsn(Opcodes.ACONST_NULL);
            AsmUtil.PUSH(mv, -1);
        }
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESQL, END_METHOD, END_SIGNATURE, false);
    }
    mv.visitInsn(opcode);
}