Opcodes
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_TYPE
api
AALOAD, 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_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, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW_EXPERIMENTAL, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V9
Modifier | Constructor | Description |
---|---|---|
|
SimpleVerifier() |
Constructs a new
SimpleVerifier . |
protected |
SimpleVerifier(int api,
Type currentClass,
Type currentSuperClass,
java.util.List<Type> 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. |
|
SimpleVerifier(Type currentClass,
Type currentSuperClass,
java.util.List<Type> currentClassInterfaces,
boolean isInterface) |
Constructs a new
SimpleVerifier to verify a specific class. |
Modifier and Type | Method | Description |
---|---|---|
protected java.lang.Class<?> |
getClass(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 Type |
getSuperClass(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(Type type1,
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(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(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(scala.tools.asm.Type) . |
newOperation
binaryOperation, copyOperation, naryOperation, returnOperation, ternaryOperation, unaryOperation
newEmptyNonParameterLocalValue, newEmptyValueAfterSize2Local, newEmptyValueForPreviousSize2Local, newExceptionValue, newParameterValue, newReturnTypeValue
public SimpleVerifier()
SimpleVerifier
. Subclasses must not use this constructor.
Instead, they must use the SimpleVerifier(int, Type, Type, List, boolean)
version.public SimpleVerifier(Type currentClass, 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(Type currentClass, Type currentSuperClass, java.util.List<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, Type currentClass, Type currentSuperClass, java.util.List<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_EXPERIMENTAL
.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(scala.tools.asm.Type)
.loader
- the ClassLoader
to use.public BasicValue newValue(Type type)
Interpreter
Called for method parameters (including this
), exception handler variable and
with null
type for variables reserved by long and double types.
newValue
in class BasicInterpreter
type
- a primitive or reference type, or null to represent an uninitialized
value.protected boolean isArrayValue(BasicValue value)
BasicVerifier
isArrayValue
in class BasicVerifier
value
- a value.protected BasicValue getElementValue(BasicValue objectArrayValue) throws AnalyzerException
BasicVerifier
getElementValue
in class BasicVerifier
objectArrayValue
- 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)
BasicVerifier
isSubTypeOf
in class BasicVerifier
value
- a value.expected
- another value.public BasicValue merge(BasicValue value1, BasicValue value2)
Interpreter
merge
in class BasicInterpreter
value1
- a value.value2
- another value.protected boolean isInterface(Type type)
type
- a type.protected Type getSuperClass(Type type)
type
- a type.protected boolean isAssignableFrom(Type type1, Type type2)
type1
- a type.type2
- another type.protected java.lang.Class<?> getClass(Type type)
setClassLoader(java.lang.ClassLoader)
, or with the class loader of this class if no class
loader was specified.type
- a type.