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.ApicallASM.java

License:Apache License

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 tp = paramTypes[i];/*w  ww .  j  av  a 2 s. c  o  m*/
        mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);
        AsmUtil.PUSH(mv, i);
        switch (tp.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 += tp.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, TRACESUBCALL, 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.ApicallASM.java

License:Apache License

private void capReturn() {
    Type tp = returnType;/*from   w  ww .j av a  2 s . co  m*/
    if (tp == null || tp.equals(Type.VOID_TYPE)) {
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);
        mv.visitInsn(Opcodes.ACONST_NULL);
        mv.visitInsn(Opcodes.ACONST_NULL);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESUBCALL, END_METHOD, END_SIGNATURE, false);
        return;
    }
    int i = newLocal(tp);
    switch (tp.getSort()) {
    case Type.BOOLEAN:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
                false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.BYTE:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.CHAR:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;",
                false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.SHORT:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.INT:
        mv.visitVarInsn(Opcodes.ISTORE, i);
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ILOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;",
                false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.LONG:
        mv.visitVarInsn(Opcodes.LSTORE, i);
        mv.visitVarInsn(Opcodes.LLOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.LLOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.FLOAT:
        mv.visitVarInsn(Opcodes.FSTORE, i);
        mv.visitVarInsn(Opcodes.FLOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.FLOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;", false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    case Type.DOUBLE:
        mv.visitVarInsn(Opcodes.DSTORE, i);
        mv.visitVarInsn(Opcodes.DLOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.DLOAD, i);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
        break;
    default:
        mv.visitVarInsn(Opcodes.ASTORE, i);
        mv.visitVarInsn(Opcodes.ALOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
        mv.visitVarInsn(Opcodes.ALOAD, i);// return
        mv.visitInsn(Opcodes.ACONST_NULL);// throwable
    }
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESUBCALL, END_METHOD, END_SIGNATURE, false);
}

From source file:scouter.agent.asm.ApicallASM.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  ava2 s.  c  o m*/
    mv.visitInsn(DUP);
    int errIdx = newLocal(Type.getType(Throwable.class));
    mv.visitVarInsn(Opcodes.ASTORE, errIdx);
    mv.visitVarInsn(Opcodes.ALOAD, statIdx);// stat
    mv.visitInsn(Opcodes.ACONST_NULL);// return
    mv.visitVarInsn(Opcodes.ALOAD, errIdx);// throwable
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACESUBCALL, END_METHOD, END_SIGNATURE, false);
    mv.visitInsn(ATHROW);
    mv.visitMaxs(maxStack + 8, maxLocals + 2);
}

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

License:Apache License

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 tp = paramTypes[i];//w  w w.  j  a  v  a 2  s . c  o m
        mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);
        AsmUtil.PUSH(mv, i);
        switch (tp.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 += tp.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, TRACESUBCALL, START_METHOD, START_SIGNATURE, false);
    mv.visitCode();
}

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

License:Apache License

@Override
public void visitInsn(int opcode) {
    if ((opcode >= IRETURN && opcode <= RETURN)) {
        Type tp = returnType;//  w  ww  .  jav a2s .c o m
        int i = newLocal(tp);
        mv.visitVarInsn(Opcodes.ASTORE, i);
        mv.visitVarInsn(Opcodes.ALOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitVarInsn(Opcodes.ALOAD, i);

        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET, END_METHOD, END_METHOD_DESC, false);
    }
    mv.visitInsn(opcode);
}

From source file:scouter.agent.asm.asyncsupport.CallRunnableASM.java

License:Apache License

@Override
public void visitCode() {
    mv.visitVarInsn(Opcodes.ALOAD, 0);/*from  www. j  a  va 2  s .com*/
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET, 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.asyncsupport.CallRunnableASM.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 w w. j  ava 2 s.c  o m*/
    mv.visitInsn(DUP);
    int errIdx = newLocal(Type.getType(Throwable.class));
    mv.visitVarInsn(Opcodes.ASTORE, errIdx);

    mv.visitInsn(Opcodes.ACONST_NULL);// return
    mv.visitVarInsn(Opcodes.ALOAD, statIdx);
    mv.visitVarInsn(Opcodes.ALOAD, errIdx);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET, END_METHOD, END_METHOD_DESC, false);
    mv.visitInsn(ATHROW);
    mv.visitMaxs(maxStack + 8, maxLocals + 2);
}

From source file:scouter.agent.asm.asyncsupport.LambdaFormASM.java

License:Apache License

@Override
public void visitCode() {
    int sidx = 1;
    mv.visitVarInsn(Opcodes.ALOAD, 0);/*ww  w. j  a  v  a  2 s.c o  m*/
    AsmUtil.PUSH(mv, fullName);
    AsmUtil.PUSH(mv, className);
    AsmUtil.PUSH(mv, name);
    AsmUtil.PUSH(mv, desc);
    mv.visitVarInsn(Opcodes.ALOAD, 0);

    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 tp = paramTypes[i];
        mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);
        AsmUtil.PUSH(mv, i);

        AsmUtil.loadForArrayElement(mv, tp, sidx);
        mv.visitInsn(Opcodes.AASTORE);
        sidx += tp.getSize();
    }
    mv.visitVarInsn(Opcodes.ALOAD, arrVarIdx);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET, START_METHOD, START_METHOD_DESC, false);

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

From source file:scouter.agent.asm.asyncsupport.RequestStartAsyncASM.java

License:Apache License

@Override
public void visitInsn(int opcode) {
    if ((opcode >= IRETURN && opcode <= RETURN)) {
        Type tp = returnType;/*ww  w.j a v  a2  s.co m*/
        if (!"javax/servlet/AsyncContext".equals(tp.getInternalName())) {
            return;
        }
        int i = newLocal(tp);
        mv.visitVarInsn(Opcodes.ASTORE, i);
        mv.visitVarInsn(Opcodes.ALOAD, i);
        mv.visitVarInsn(Opcodes.ALOAD, i);

        mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, END_METHOD, END_SIGNATURE, false);
    }
    mv.visitInsn(opcode);
}

From source file:scouter.agent.asm.asyncsupport.spring.SpringAsyncExecutionAspectSupportDoSubmitASM.java

License:Apache License

@Override
public void visitCode() {
    mv.visitVarInsn(Opcodes.ALOAD, 1);// w  w  w .  j a  va  2 s .c o  m
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, CALL_METHOD, CALL_SIGNATURE, false);
    mv.visitVarInsn(Opcodes.ASTORE, 1);
    mv.visitCode();
}