public class SimpleVerifier extends BasicVerifier
BasicVerifier that performs more precise verifications. This verifier
computes exact class types, instead of using a single "object reference" type (as done in BasicVerifier).NULL_TYPEapiAALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, ASM6, ASM7, ASM8_EXPERIMENTAL, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V9| Modifier | Constructor and Description |
|---|---|
|
SimpleVerifier()
Constructs a new
SimpleVerifier. |
protected |
SimpleVerifier(int api,
org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
java.util.List<org.objectweb.asm.Type> currentClassInterfaces,
boolean isInterface)
Constructs a new
SimpleVerifier to verify a specific class. |
|
SimpleVerifier(org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
boolean isInterface)
Constructs a new
SimpleVerifier to verify a specific class. |
|
SimpleVerifier(org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
java.util.List<org.objectweb.asm.Type> currentClassInterfaces,
boolean isInterface)
Constructs a new
SimpleVerifier to verify a specific class. |
| Modifier and Type | Method and Description |
|---|---|
protected java.lang.Class<?> |
getClass(org.objectweb.asm.Type type)
Loads the class corresponding to the given type.
|
protected BasicValue |
getElementValue(BasicValue objectArrayValue)
Returns the value corresponding to the type of the elements of the given array reference value.
|
protected org.objectweb.asm.Type |
getSuperClass(org.objectweb.asm.Type type)
Returns the type corresponding to the super class of the given type.
|
protected boolean |
isArrayValue(BasicValue value)
Returns whether the given value corresponds to an array reference.
|
protected boolean |
isAssignableFrom(org.objectweb.asm.Type type1,
org.objectweb.asm.Type type2)
Returns whether the class corresponding to the first argument is either the same as, or is a
superclass or superinterface of the class corresponding to the second argument.
|
protected boolean |
isInterface(org.objectweb.asm.Type type)
Returns whether the given type corresponds to the type of an interface.
|
protected boolean |
isSubTypeOf(BasicValue value,
BasicValue expected)
Returns whether the type corresponding to the first argument is a subtype of the type
corresponding to the second argument.
|
BasicValue |
merge(BasicValue value1,
BasicValue value2)
Merges two values.
|
BasicValue |
newValue(org.objectweb.asm.Type type)
Creates a new value that represents the given type.
|
void |
setClassLoader(java.lang.ClassLoader loader)
Sets the
ClassLoader to be used in getClass(org.objectweb.asm.Type). |
binaryOperation, copyOperation, naryOperation, returnOperation, ternaryOperation, unaryOperationnewOperationnewEmptyValue, newExceptionValue, newParameterValue, newReturnTypeValuepublic SimpleVerifier()
SimpleVerifier. Subclasses must not use this constructor.
Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean) version.public SimpleVerifier(org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
boolean isInterface)
SimpleVerifier to verify a specific class. This class will not be
loaded into the JVM since it may be incorrect. Subclasses must not use this constructor.
Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean) version.currentClass - the type of the class to be verified.currentSuperClass - the type of the super class of the class to be verified.isInterface - whether the class to be verifier is an interface.public SimpleVerifier(org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
java.util.List<org.objectweb.asm.Type> currentClassInterfaces,
boolean isInterface)
SimpleVerifier to verify a specific class. This class will not be
loaded into the JVM since it may be incorrect. Subclasses must not use this constructor.
Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean) version.currentClass - the type of the class to be verified.currentSuperClass - the type of the super class of the class to be verified.currentClassInterfaces - the types of the interfaces directly implemented by the class to
be verified.isInterface - whether the class to be verifier is an interface.protected SimpleVerifier(int api,
org.objectweb.asm.Type currentClass,
org.objectweb.asm.Type currentSuperClass,
java.util.List<org.objectweb.asm.Type> currentClassInterfaces,
boolean isInterface)
SimpleVerifier to verify a specific class. This class will not be
loaded into the JVM since it may be incorrect.api - the ASM API version supported by this verifier. Must be one of Opcodes.ASM4, Opcodes.ASM5, Opcodes.ASM6 or Opcodes.ASM7.currentClass - the type of the class to be verified.currentSuperClass - the type of the super class of the class to be verified.currentClassInterfaces - the types of the interfaces directly implemented by the class to
be verified.isInterface - whether the class to be verifier is an interface.public void setClassLoader(java.lang.ClassLoader loader)
ClassLoader to be used in getClass(org.objectweb.asm.Type).loader - the ClassLoader to use.public BasicValue newValue(org.objectweb.asm.Type type)
InterpreterCalled for method parameters (including this), exception handler variable and
with null type for variables reserved by long and double types.
An interpreter may choose to implement one or more of Interpreter.newReturnTypeValue(Type), Interpreter.newParameterValue(boolean, int,
Type), Interpreter.newEmptyValue(int), Interpreter.newExceptionValue(TryCatchBlockNode, Frame, Type) to distinguish different types
of new value.
newValue in class BasicInterpretertype - a primitive or reference type, or null to represent an uninitialized
value.protected boolean isArrayValue(BasicValue value)
BasicVerifierisArrayValue in class BasicVerifiervalue - a value.protected BasicValue getElementValue(BasicValue objectArrayValue) throws AnalyzerException
BasicVerifiergetElementValue in class BasicVerifierobjectArrayValue - a value corresponding to array of object (or array) references.AnalyzerException - if objectArrayValue does not correspond to an array type.protected boolean isSubTypeOf(BasicValue value, BasicValue expected)
BasicVerifierisSubTypeOf in class BasicVerifiervalue - a value.expected - another value.public BasicValue merge(BasicValue value1, BasicValue value2)
Interpretermerge in class BasicInterpretervalue1 - a value.value2 - another value.value1, this method
must return value1.protected boolean isInterface(org.objectweb.asm.Type type)
type - a type.protected org.objectweb.asm.Type getSuperClass(org.objectweb.asm.Type type)
type - a type.protected boolean isAssignableFrom(org.objectweb.asm.Type type1,
org.objectweb.asm.Type type2)
type1 - a type.type2 - another type.protected java.lang.Class<?> getClass(org.objectweb.asm.Type type)
setClassLoader(java.lang.ClassLoader), or with the class loader of this class if no class
loader was specified.type - a type.