org.objectweb.asm.tree.analysis

## Class BasicVerifier

- java.lang.Object
- - org.objectweb.asm.tree.analysis.Interpreter<BasicValue>
  - - org.objectweb.asm.tree.analysis.BasicInterpreter
    - - org.objectweb.asm.tree.analysis.BasicVerifier

- All Implemented Interfaces:
    Opcodes
  Direct Known Subclasses:
    SimpleVerifier

      public class BasicVerifier
      extends BasicInterpreter

  An extended `BasicInterpreter` that checks that bytecode instructions are correctly used.
  Author:
    Eric Bruneton, Bing Ran

- - ### Field Summary

    - ### Fields inherited from class org.objectweb.asm.tree.analysis.Interpreter

      `api`

    - ### Fields inherited from interface org.objectweb.asm.Opcodes

      `AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `BasicVerifier()`
    `protected` | `BasicVerifier(int api)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `BasicValue` | `binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2)` Interprets a bytecode instruction with two arguments.
    `BasicValue` | `copyOperation(AbstractInsnNode insn, BasicValue value)` Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
    `protected BasicValue` | `getElementValue(BasicValue objectArrayValue)`
    `protected boolean` | `isArrayValue(BasicValue value)`
    `protected boolean` | `isSubTypeOf(BasicValue value, BasicValue expected)`
    `BasicValue` | `naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values)` Interprets a bytecode instruction with a variable number of arguments.
    `void` | `returnOperation(AbstractInsnNode insn, BasicValue value, BasicValue expected)` Interprets a bytecode return instruction.
    `BasicValue` | `ternaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2, BasicValue value3)` Interprets a bytecode instruction with three arguments.
    `BasicValue` | `unaryOperation(AbstractInsnNode insn, BasicValue value)` Interprets a bytecode instruction with a single argument.

    - ### Methods inherited from class org.objectweb.asm.tree.analysis.BasicInterpreter

      `merge, newOperation, newValue`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### BasicVerifier

          public BasicVerifier()

    - #### BasicVerifier

          protected BasicVerifier(int api)

  - ### Method Detail

    - #### copyOperation

          public BasicValue copyOperation(AbstractInsnNode insn,
                                          BasicValue value)
                                   throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode instruction that moves a value on the stack or to or from local variables. This method is called for the following opcodes: ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP
      Overrides:
        `copyOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `value` - the value that must be moved by the instruction.
      Returns:
        the result of the interpretation of the given instruction. The returned value must be `equal` to the given value.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### unaryOperation

          public BasicValue unaryOperation(AbstractInsnNode insn,
                                           BasicValue value)
                                    throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode instruction with a single argument. This method is called for the following opcodes: INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST, INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL
      Overrides:
        `unaryOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `value` - the argument of the instruction to be interpreted.
      Returns:
        the result of the interpretation of the given instruction.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### binaryOperation

          public BasicValue binaryOperation(AbstractInsnNode insn,
                                            BasicValue value1,
                                            BasicValue value2)
                                     throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode instruction with two arguments. This method is called for the following opcodes: IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, PUTFIELD
      Overrides:
        `binaryOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `value1` - the first argument of the instruction to be interpreted.
        `value2` - the second argument of the instruction to be interpreted.
      Returns:
        the result of the interpretation of the given instruction.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### ternaryOperation

          public BasicValue ternaryOperation(AbstractInsnNode insn,
                                             BasicValue value1,
                                             BasicValue value2,
                                             BasicValue value3)
                                      throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode instruction with three arguments. This method is called for the following opcodes: IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
      Overrides:
        `ternaryOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `value1` - the first argument of the instruction to be interpreted.
        `value2` - the second argument of the instruction to be interpreted.
        `value3` - the third argument of the instruction to be interpreted.
      Returns:
        the result of the interpretation of the given instruction.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### naryOperation

          public BasicValue naryOperation(AbstractInsnNode insn,
                                          List<? extends BasicValue> values)
                                   throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes: INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC
      Overrides:
        `naryOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `values` - the arguments of the instruction to be interpreted.
      Returns:
        the result of the interpretation of the given instruction.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### returnOperation

          public void returnOperation(AbstractInsnNode insn,
                                      BasicValue value,
                                      BasicValue expected)
                               throws AnalyzerException

      Description copied from class: `Interpreter`
      Interprets a bytecode return instruction. This method is called for the following opcodes: IRETURN, LRETURN, FRETURN, DRETURN, ARETURN
      Overrides:
        `returnOperation` in class `BasicInterpreter`
      Parameters:
        `insn` - the bytecode instruction to be interpreted.
        `value` - the argument of the instruction to be interpreted.
        `expected` - the expected return type of the analyzed method.
      Throws:
        `AnalyzerException` - if an error occured during the interpretation.

    - #### isArrayValue

          protected boolean isArrayValue(BasicValue value)

    - #### getElementValue

          protected BasicValue getElementValue(BasicValue objectArrayValue)
                                        throws AnalyzerException

      Throws:
        `AnalyzerException`

    - #### isSubTypeOf

          protected boolean isSubTypeOf(BasicValue value,
                                        BasicValue expected)