public final class Pass2Verifier extends PassVerifier implements Constants
do_verify()
Modifier and Type | Class and Description |
---|---|
private class |
Pass2Verifier.CPESSC_Visitor
A Visitor class that ensures the constant pool satisfies the static
constraints.
|
private class |
Pass2Verifier.FAMRAV_Visitor
A Visitor class that ensures the ConstantCP-subclassed entries
of the constant pool are valid.
|
private static class |
Pass2Verifier.InnerClassDetector
This class serves for finding out if a given JavaClass' ConstantPool
references an Inner Class.
|
Modifier and Type | Field and Description |
---|---|
private LocalVariablesInfo[] |
localVariablesInfos
The LocalVariableInfo instances used by Pass3bVerifier.
|
private Verifier |
myOwner
The Verifier that created this.
|
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, 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, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_RUNTIMEINVISIBLE_ANNOTATIONS, ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_Long, CONSTANT_Methodref, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, 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, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, 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, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
Constructor and Description |
---|
Pass2Verifier(Verifier owner)
Should only be instantiated by a Verifier.
|
Modifier and Type | Method and Description |
---|---|
private void |
constant_pool_entries_satisfy_static_constraints()
Ensures that the constant pool entries satisfy the static constraints
as described in The Java Virtual Machine Specification, 2nd Edition.
|
VerificationResult |
do_verify()
Pass 2 is the pass where static properties of the
class file are checked without looking into "Code"
arrays of methods.
|
private void |
every_class_has_an_accessible_superclass()
Ensures that every class has a super class and that
final classes are not subclassed.
|
private void |
field_and_method_refs_are_valid()
Ensures that the ConstantCP-subclassed entries of the constant
pool are valid.
|
private void |
final_methods_are_not_overridden()
Ensures that final methods are not overridden.
|
LocalVariablesInfo |
getLocalVariablesInfo(int method_nr)
Returns a LocalVariablesInfo object containing information
about the usage of the local variables in the Code attribute
of the said method or null if the class file this
Pass2Verifier operates on could not be pass-2-verified correctly.
|
private static java.lang.String |
tostring(Node n)
This method is here to save typing work and improve code readability.
|
private static boolean |
validClassMethodName(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid method name that may be referenced by
ConstantMethodref objects.
|
private static boolean |
validClassName(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid Java class name.
|
private static boolean |
validFieldName(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid Java field name.
|
private static boolean |
validInterfaceMethodName(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid Java interface method name that may be
referenced by ConstantInterfaceMethodref objects.
|
private static boolean |
validJavaIdentifier(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid Java identifier (so-called simple name).
|
private static boolean |
validJavaLangMethodName(java.lang.String name)
This method returns true if and only if the supplied String
represents a valid Java programming language method name stored as a simple
(non-qualified) name.
|
private static boolean |
validMethodName(java.lang.String name,
boolean allowStaticInit)
This method returns true if and only if the supplied String
represents a valid method name.
|
addMessage, getMessages, verify
private LocalVariablesInfo[] localVariablesInfos
private final Verifier myOwner
public LocalVariablesInfo getLocalVariablesInfo(int method_nr)
public VerificationResult do_verify()
do_verify
in class PassVerifier
Pass3aVerifier
private void every_class_has_an_accessible_superclass()
ClassConstraintException
- otherwise.private void final_methods_are_not_overridden()
ClassConstraintException
- otherwise.constant_pool_entries_satisfy_static_constraints()
,
every_class_has_an_accessible_superclass()
private void constant_pool_entries_satisfy_static_constraints()
ClassConstraintException
- otherwise.private void field_and_method_refs_are_valid()
ClassConstraintException
- otherwise.constant_pool_entries_satisfy_static_constraints()
private static boolean validClassName(java.lang.String name)
private static boolean validMethodName(java.lang.String name, boolean allowStaticInit)
private static boolean validClassMethodName(java.lang.String name)
private static boolean validJavaLangMethodName(java.lang.String name)
private static boolean validInterfaceMethodName(java.lang.String name)
private static boolean validJavaIdentifier(java.lang.String name)
private static boolean validFieldName(java.lang.String name)
private static java.lang.String tostring(Node n)