org.objectweb.asm.tree.analysis
Class SimpleVerifier

java.lang.Object
  extended by org.objectweb.asm.tree.analysis.Interpreter<BasicValue>
      extended by org.objectweb.asm.tree.analysis.BasicInterpreter
          extended by org.objectweb.asm.tree.analysis.BasicVerifier
              extended by 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_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, 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
 
Constructor Summary
  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
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)