org.objectweb.asm.tree.analysis
Class SimpleVerifier

java.lang.Object
  extended byorg.objectweb.asm.tree.analysis.BasicInterpreter
      extended byorg.objectweb.asm.tree.analysis.BasicVerifier
          extended byorg.objectweb.asm.tree.analysis.SimpleVerifier
All 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).

Author:
Eric Bruneton, Bing Ran

Field Summary
 
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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, 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, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6
 
Constructor Summary
SimpleVerifier()
          Constructs a new SimpleVerifier.
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  boolean isArrayValue(Value value)
           
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, naryOperation, 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.
Method Detail

newValue

public Value newValue(Type type)
Description copied from interface: Interpreter
Creates a new value that represents the given type.

Specified by:
newValue in interface Interpreter
Overrides:
newValue in class BasicInterpreter

isArrayValue

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

getElementValue

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

isSubTypeOf

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

merge

public Value merge(Value v,
                   Value w)
Description copied from interface: 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).

Specified by:
merge in interface Interpreter
Overrides:
merge in class BasicInterpreter

getClass

protected Class getClass(Type t)