Package org.objectweb.asm.tree.analysis
Class SimpleVerifier
- java.lang.Object
-
- org.objectweb.asm.tree.analysis.Interpreter<BasicValue>
-
- org.objectweb.asm.tree.analysis.BasicInterpreter
-
- org.objectweb.asm.tree.analysis.BasicVerifier
-
- org.objectweb.asm.tree.analysis.SimpleVerifier
-
- All Implemented Interfaces:
Opcodes
public class SimpleVerifier extends BasicVerifier
An extendedBasicVerifierthat performs more precise verifications. This verifier computes exact class types, instead of using a single "object reference" type (as done in theBasicVerifier).- 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_MANDATED, 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, ASM5, 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, V1_8
-
-
Constructor Summary
Constructors Modifier Constructor Description SimpleVerifier()Constructs a newSimpleVerifier.protectedSimpleVerifier(int api, Type currentClass, Type currentSuperClass, java.util.List<Type> currentClassInterfaces, boolean isInterface)SimpleVerifier(Type currentClass, Type currentSuperClass, boolean isInterface)Constructs a newSimpleVerifierto verify a specific class.SimpleVerifier(Type currentClass, Type currentSuperClass, java.util.List<Type> currentClassInterfaces, boolean isInterface)Constructs a newSimpleVerifierto verify a specific class.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.Class<?>getClass(Type t)protected BasicValuegetElementValue(BasicValue objectArrayValue)protected TypegetSuperClass(Type t)protected booleanisArrayValue(BasicValue value)protected booleanisAssignableFrom(Type t, Type u)protected booleanisInterface(Type t)protected booleanisSubTypeOf(BasicValue value, BasicValue expected)BasicValuemerge(BasicValue v, BasicValue w)Merges two values.BasicValuenewValue(Type type)Creates a new value that represents the given type.voidsetClassLoader(java.lang.ClassLoader loader)Set theClassLoaderwhich 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
-
-
-
-
Constructor Detail
-
SimpleVerifier
public SimpleVerifier()
Constructs a newSimpleVerifier.
-
SimpleVerifier
public SimpleVerifier(Type currentClass, Type currentSuperClass, boolean isInterface)
Constructs a newSimpleVerifierto 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, java.util.List<Type> currentClassInterfaces, boolean isInterface)
Constructs a newSimpleVerifierto 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.
-
-
Method Detail
-
setClassLoader
public void setClassLoader(java.lang.ClassLoader loader)
Set theClassLoaderwhich will be used to load referenced classes. This is useful if you are verifying multiple interdependent classes.- Parameters:
loader- aClassLoaderto use
-
newValue
public BasicValue newValue(Type type)
Description copied from class:InterpreterCreates a new value that represents the given type. Called for method parameters (includingthis), exception handler variable and withnulltype for variables reserved by long and double types.- Overrides:
newValuein classBasicInterpreter- 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:
isArrayValuein classBasicVerifier
-
getElementValue
protected BasicValue getElementValue(BasicValue objectArrayValue) throws AnalyzerException
- Overrides:
getElementValuein classBasicVerifier- Throws:
AnalyzerException
-
isSubTypeOf
protected boolean isSubTypeOf(BasicValue value, BasicValue expected)
- Overrides:
isSubTypeOfin classBasicVerifier
-
merge
public BasicValue merge(BasicValue v, BasicValue w)
Description copied from class:InterpreterMerges 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:
mergein classBasicInterpreter- 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)
-
getClass
protected java.lang.Class<?> getClass(Type t)
-
-