Class SimpleVerifier

  • All Implemented Interfaces:
    org.objectweb.asm.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 BasicVerifier).
    • 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_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V9
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        SimpleVerifier()
      Constructs a new SimpleVerifier.
      protected SimpleVerifier​(int api, org.objectweb.asm.Type currentClass, org.objectweb.asm.Type currentSuperClass, java.util.List<org.objectweb.asm.Type> currentClassInterfaces, boolean isInterface)
      Constructs a new SimpleVerifier to verify a specific class.
        SimpleVerifier​(org.objectweb.asm.Type currentClass, org.objectweb.asm.Type currentSuperClass, boolean isInterface)
      Constructs a new SimpleVerifier to verify a specific class.
        SimpleVerifier​(org.objectweb.asm.Type currentClass, org.objectweb.asm.Type currentSuperClass, java.util.List<org.objectweb.asm.Type> currentClassInterfaces, boolean isInterface)
      Constructs a new SimpleVerifier to verify a specific class.
    • Constructor Detail

      • SimpleVerifier

        public SimpleVerifier​(org.objectweb.asm.Type currentClass,
                              org.objectweb.asm.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. Subclasses must not use this constructor. Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean) version.
        Parameters:
        currentClass - the type of the class to be verified.
        currentSuperClass - the type of the super class of the class to be verified.
        isInterface - whether the class to be verifier is an interface.
      • SimpleVerifier

        public SimpleVerifier​(org.objectweb.asm.Type currentClass,
                              org.objectweb.asm.Type currentSuperClass,
                              java.util.List<org.objectweb.asm.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. Subclasses must not use this constructor. Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean) version.
        Parameters:
        currentClass - the type of the class to be verified.
        currentSuperClass - the type of the super class of the class to be verified.
        currentClassInterfaces - the types of the interfaces directly implemented by the class to be verified.
        isInterface - whether the class to be verifier is an interface.
      • SimpleVerifier

        protected SimpleVerifier​(int api,
                                 org.objectweb.asm.Type currentClass,
                                 org.objectweb.asm.Type currentSuperClass,
                                 java.util.List<org.objectweb.asm.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:
        api - the ASM API version supported by this verifier. Must be one of Opcodes.ASM4, Opcodes.ASM5, Opcodes.ASM6, Opcodes.ASM7, Opcodes.ASM8 or or Opcodes.ASM9.
        currentClass - the type of the class to be verified.
        currentSuperClass - the type of the super class of the class to be verified.
        currentClassInterfaces - the types of the interfaces directly implemented by the class to be verified.
        isInterface - whether the class to be verifier is an interface.
    • Method Detail

      • setClassLoader

        public void setClassLoader​(java.lang.ClassLoader loader)
        Sets the ClassLoader to be used in getClass(org.objectweb.asm.Type).
        Parameters:
        loader - the ClassLoader to use.
      • isArrayValue

        protected boolean isArrayValue​(BasicValue value)
        Description copied from class: BasicVerifier
        Returns whether the given value corresponds to an array reference.
        Overrides:
        isArrayValue in class BasicVerifier
        Parameters:
        value - a value.
        Returns:
        whether 'value' corresponds to an array reference.
      • getElementValue

        protected BasicValue getElementValue​(BasicValue objectArrayValue)
                                      throws AnalyzerException
        Description copied from class: BasicVerifier
        Returns the value corresponding to the type of the elements of the given array reference value.
        Overrides:
        getElementValue in class BasicVerifier
        Parameters:
        objectArrayValue - a value corresponding to array of object (or array) references.
        Returns:
        the value corresponding to the type of the elements of 'objectArrayValue'.
        Throws:
        AnalyzerException - if objectArrayValue does not correspond to an array type.
      • isSubTypeOf

        protected boolean isSubTypeOf​(BasicValue value,
                                      BasicValue expected)
        Description copied from class: BasicVerifier
        Returns whether the type corresponding to the first argument is a subtype of the type corresponding to the second argument.
        Overrides:
        isSubTypeOf in class BasicVerifier
        Parameters:
        value - a value.
        expected - another value.
        Returns:
        whether the type corresponding to 'value' is a subtype of the type corresponding to 'expected'.
      • merge

        public BasicValue merge​(BasicValue value1,
                                BasicValue value2)
        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:
        value1 - a value.
        value2 - another value.
        Returns:
        the merged value. If the merged value is equal to value1, this method must return value1.
      • isInterface

        protected boolean isInterface​(org.objectweb.asm.Type type)
        Returns whether the given type corresponds to the type of an interface. The default implementation of this method loads the class and uses the reflection API to return its result (unless the given type corresponds to the class being verified).
        Parameters:
        type - a type.
        Returns:
        whether 'type' corresponds to an interface.
      • getSuperClass

        protected org.objectweb.asm.Type getSuperClass​(org.objectweb.asm.Type type)
        Returns the type corresponding to the super class of the given type. The default implementation of this method loads the class and uses the reflection API to return its result (unless the given type corresponds to the class being verified).
        Parameters:
        type - a type.
        Returns:
        the type corresponding to the super class of 'type'.
      • isAssignableFrom

        protected boolean isAssignableFrom​(org.objectweb.asm.Type type1,
                                           org.objectweb.asm.Type type2)
        Returns whether the class corresponding to the first argument is either the same as, or is a superclass or superinterface of the class corresponding to the second argument. The default implementation of this method loads the classes and uses the reflection API to return its result (unless the result can be computed from the class being verified, and the types of its super classes and implemented interfaces).
        Parameters:
        type1 - a type.
        type2 - another type.
        Returns:
        whether the class corresponding to 'type1' is either the same as, or is a superclass or superinterface of the class corresponding to 'type2'.
      • getClass

        protected java.lang.Class<?> getClass​(org.objectweb.asm.Type type)
        Loads the class corresponding to the given type. The class is loaded with the class loader specified with setClassLoader(java.lang.ClassLoader), or with the class loader of this class if no class loader was specified.
        Parameters:
        type - a type.
        Returns:
        the class corresponding to 'type'.