org.objectweb.asm.tree.analysis

## Class SimpleVerifier

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

- All Implemented Interfaces:
    Opcodes

      public class SimpleVerifier
      extends BasicVerifier

  An extended `BasicVerifier` that performs more precise verifications. This verifier computes exact class types, instead of using a single "object reference" type (as done in the `BasicVerifier`).
  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
    --- | ---
    `` | `SimpleVerifier()` Constructs a new `SimpleVerifier`.
    `protected` | `SimpleVerifier(int api, Type currentClass, Type currentSuperClass, List<Type> currentClassInterfaces, boolean isInterface)`
    `` | `SimpleVerifier(Type currentClass, Type currentSuperClass, boolean isInterface)` Constructs a new `SimpleVerifier` to verify a specific class.
    `` | `SimpleVerifier(Type currentClass, Type currentSuperClass, List<Type> currentClassInterfaces, boolean isInterface)` Constructs a new `SimpleVerifier` to verify a specific class.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Class<?>` | `getClass(Type t)`
    `protected BasicValue` | `getElementValue(BasicValue objectArrayValue)`
    `protected Type` | `getSuperClass(Type t)`
    `protected boolean` | `isArrayValue(BasicValue value)`
    `protected boolean` | `isAssignableFrom(Type t, Type u)`
    `protected boolean` | `isInterface(Type t)`
    `protected boolean` | `isSubTypeOf(BasicValue value, BasicValue expected)`
    `BasicValue` | `merge(BasicValue v, BasicValue w)` Merges two values.
    `BasicValue` | `newValue(Type type)` Creates a new value that represents the given type.
    `void` | `setClassLoader(ClassLoader loader)` Set the `ClassLoader` which will be used to load referenced classes.

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

      `binaryOperation, copyOperation, naryOperation, returnOperation, ternaryOperation, unaryOperation`

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

      `newOperation`

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

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

- - ### Constructor Detail

    - #### SimpleVerifier

          public SimpleVerifier()

      Constructs a new `SimpleVerifier`.

    - #### SimpleVerifier

          public SimpleVerifier(Type currentClass,
                                Type currentSuperClass,
                                boolean isInterface)

      Constructs a new `SimpleVerifier` to verify a specific class. This class will not be loaded into the JVM since it may be incorrect.
      Parameters:
        `currentClass` - the class that is verified.
        `currentSuperClass` - the super class of the class that is verified.
        `isInterface` - if the class that is verified is an interface.

    - #### SimpleVerifier

          public SimpleVerifier(Type currentClass,
                                Type currentSuperClass,
                                List<Type> currentClassInterfaces,
                                boolean isInterface)

      Constructs a new `SimpleVerifier` to verify a specific class. This class will not be loaded into the JVM since it may be incorrect.
      Parameters:
        `currentClass` - the class that is verified.
        `currentSuperClass` - the super class of the class that is verified.
        `currentClassInterfaces` - the interfaces implemented by the class that is verified.
        `isInterface` - if the class that is verified is an interface.

    - #### SimpleVerifier

          protected SimpleVerifier(int api,
                                   Type currentClass,
                                   Type currentSuperClass,
                                   List<Type> currentClassInterfaces,
                                   boolean isInterface)

  - ### Method Detail

    - #### setClassLoader

          public void setClassLoader(ClassLoader loader)

      Set the `ClassLoader` which will be used to load referenced classes. This is useful if you are verifying multiple interdependent classes.
      Parameters:
        `loader` - a `ClassLoader` to use

    - #### newValue

          public BasicValue newValue(Type type)

      Description copied from class: `Interpreter`
      Creates a new value that represents the given type. Called for method parameters (including `this`), exception handler variable and with `null` type for variables reserved by long and double types.
      Overrides:
        `newValue` in class `BasicInterpreter`
      Parameters:
        `type` - a primitive or reference type, or `null` to represent an uninitialized value.
      Returns:
        a value that represents the given type. The size of the returned value must be equal to the size of the given type.

    - #### isArrayValue

          protected boolean isArrayValue(BasicValue value)

      Overrides:
        `isArrayValue` in class `BasicVerifier`

    - #### getElementValue

          protected BasicValue getElementValue(BasicValue objectArrayValue)
                                        throws AnalyzerException

      Overrides:
        `getElementValue` in class `BasicVerifier`
      Throws:
        `AnalyzerException`

    - #### isSubTypeOf

          protected boolean isSubTypeOf(BasicValue value,
                                        BasicValue expected)

      Overrides:
        `isSubTypeOf` in class `BasicVerifier`

    - #### merge

          public BasicValue merge(BasicValue v,
                                  BasicValue w)

      Description copied from class: `Interpreter`
      Merges two values. The merge operation must return a value that represents both values (for instance, if the two values are two types, the merged value must be a common super type of the two types. If the two values are integer intervals, the merged value must be an interval that contains the previous ones. Likewise for other types of values).
      Overrides:
        `merge` in class `BasicInterpreter`
      Parameters:
        `v` - a value.
        `w` - another value.
      Returns:
        the merged value. If the merged value is equal to `v`, this method must return `v`.

    - #### isInterface

          protected boolean isInterface(Type t)

    - #### getSuperClass

          protected Type getSuperClass(Type t)

    - #### isAssignableFrom

          protected boolean isAssignableFrom(Type t,
                                             Type u)

    - #### getClass

          protected Class<?> getClass(Type t)