org.objectweb.asm.tree.analysis
Class BasicVerifier

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
All Implemented Interfaces:
Opcodes
Direct Known Subclasses:
SimpleVerifier

public class BasicVerifier
extends BasicInterpreter

An extended BasicInterpreter that checks that bytecode instructions are correctly used.

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
  BasicVerifier()
           
protected BasicVerifier(int api)
           
 
Method Summary
 BasicValue binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2)
          Interprets a bytecode instruction with two arguments.
 BasicValue copyOperation(AbstractInsnNode insn, BasicValue value)
          Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
protected  BasicValue getElementValue(BasicValue objectArrayValue)
           
protected  boolean isArrayValue(BasicValue value)
           
protected  boolean isSubTypeOf(BasicValue value, BasicValue expected)
           
 BasicValue naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values)
          Interprets a bytecode instruction with a variable number of arguments.
 void returnOperation(AbstractInsnNode insn, BasicValue value, BasicValue expected)
          Interprets a bytecode return instruction.
 BasicValue ternaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2, BasicValue value3)
          Interprets a bytecode instruction with three arguments.
 BasicValue unaryOperation(AbstractInsnNode insn, BasicValue value)
          Interprets a bytecode instruction with a single argument.
 
Methods inherited from class org.objectweb.asm.tree.analysis.BasicInterpreter
merge, newOperation, newValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BasicVerifier

public BasicVerifier()

BasicVerifier

protected BasicVerifier(int api)
Method Detail

copyOperation

public BasicValue copyOperation(AbstractInsnNode insn,
                                BasicValue value)
                         throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode instruction that moves a value on the stack or to or from local variables. This method is called for the following opcodes: ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP

Overrides:
copyOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
value - the value that must be moved by the instruction.
Returns:
the result of the interpretation of the given instruction. The returned value must be equal to the given value.
Throws:
AnalyzerException - if an error occured during the interpretation.

unaryOperation

public BasicValue unaryOperation(AbstractInsnNode insn,
                                 BasicValue value)
                          throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode instruction with a single argument. This method is called for the following opcodes: INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST, INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL

Overrides:
unaryOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
value - the argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.
Throws:
AnalyzerException - if an error occured during the interpretation.

binaryOperation

public BasicValue binaryOperation(AbstractInsnNode insn,
                                  BasicValue value1,
                                  BasicValue value2)
                           throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode instruction with two arguments. This method is called for the following opcodes: IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, PUTFIELD

Overrides:
binaryOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
value1 - the first argument of the instruction to be interpreted.
value2 - the second argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.
Throws:
AnalyzerException - if an error occured during the interpretation.

ternaryOperation

public BasicValue ternaryOperation(AbstractInsnNode insn,
                                   BasicValue value1,
                                   BasicValue value2,
                                   BasicValue value3)
                            throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode instruction with three arguments. This method is called for the following opcodes: IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE

Overrides:
ternaryOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
value1 - the first argument of the instruction to be interpreted.
value2 - the second argument of the instruction to be interpreted.
value3 - the third argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.
Throws:
AnalyzerException - if an error occured during the interpretation.

naryOperation

public BasicValue naryOperation(AbstractInsnNode insn,
                                List<? extends BasicValue> values)
                         throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes: INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC

Overrides:
naryOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
values - the arguments of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.
Throws:
AnalyzerException - if an error occured during the interpretation.

returnOperation

public void returnOperation(AbstractInsnNode insn,
                            BasicValue value,
                            BasicValue expected)
                     throws AnalyzerException
Description copied from class: Interpreter
Interprets a bytecode return instruction. This method is called for the following opcodes: IRETURN, LRETURN, FRETURN, DRETURN, ARETURN

Overrides:
returnOperation in class BasicInterpreter
Parameters:
insn - the bytecode instruction to be interpreted.
value - the argument of the instruction to be interpreted.
expected - the expected return type of the analyzed method.
Throws:
AnalyzerException - if an error occured during the interpretation.

isArrayValue

protected boolean isArrayValue(BasicValue value)

getElementValue

protected BasicValue getElementValue(BasicValue objectArrayValue)
                              throws AnalyzerException
Throws:
AnalyzerException

isSubTypeOf

protected boolean isSubTypeOf(BasicValue value,
                              BasicValue expected)