org.objectweb.asm.tree.analysis

Class SimpleVerifier

Implemented Interfaces:
Interpreter, 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).
Authors:
Eric Bruneton
Bing Ran

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, 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, DUP2, DUP2_X1, DUP2_X2, DUP_X1, DUP_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, GETFIELD, GETSTATIC, GOTO, 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, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, 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, TABLESWITCH, TOP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6

Constructor Summary

SimpleVerifier()
Constructs a new SimpleVerifier.
SimpleVerifier(Type currentClass, Type currentSuperClass, List currentClassInterfaces, boolean isInterface)
Constructs a new SimpleVerifier to verify a specific class.
SimpleVerifier(Type currentClass, Type currentSuperClass, boolean isInterface)
Constructs a new SimpleVerifier to verify a specific class.

Method Summary

protected Class
getClass(Type t)
protected Value
getElementValue(Value objectArrayValue)
protected Type
getSuperClass(Type t)
protected boolean
isArrayValue(Value value)
protected boolean
isAssignableFrom(Type t, Type u)
protected boolean
isInterface(Type t)
protected boolean
isSubTypeOf(Value value, Value expected)
Value
merge(Value v, Value w)
Merges two values.
Value
newValue(Type type)
Creates a new value that represents the given type.

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

binaryOperation, copyOperation, getElementValue, isArrayValue, isSubTypeOf, naryOperation, ternaryOperation, unaryOperation

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

binaryOperation, copyOperation, merge, naryOperation, newOperation, newValue, ternaryOperation, unaryOperation

Constructor Details

SimpleVerifier

public SimpleVerifier()

SimpleVerifier

public SimpleVerifier(Type currentClass,
                      Type currentSuperClass,
                      List 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

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.

Method Details

getClass

protected Class getClass(Type t)

getElementValue

protected Value getElementValue(Value objectArrayValue)
            throws AnalyzerException
Overrides:
getElementValue in interface BasicVerifier

getSuperClass

protected Type getSuperClass(Type t)

isArrayValue

protected boolean isArrayValue(Value value)
Overrides:
isArrayValue in interface BasicVerifier

isAssignableFrom

protected boolean isAssignableFrom(Type t,
                                   Type u)

isInterface

protected boolean isInterface(Type t)

isSubTypeOf

protected boolean isSubTypeOf(Value value,
                              Value expected)
Overrides:
isSubTypeOf in interface BasicVerifier

merge

public Value merge(Value v,
                   Value w)
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).
Specified by:
merge in interface Interpreter
Overrides:
merge in interface 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.

newValue

public Value newValue(Type type)
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.
Specified by:
newValue in interface Interpreter
Overrides:
newValue in interface 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.