org.codehaus.groovy.classgen

## Class Verifier

- java.lang.Object
- - org.codehaus.groovy.classgen.Verifier

All Implemented Interfaces:
  GroovyClassVisitor, org.objectweb.asm.Opcodes

    public class Verifier
    extends Object
    implements GroovyClassVisitor, org.objectweb.asm.Opcodes

Verifies the AST node and adds any defaulted AST code before bytecode generation occurs.

Version:
  $Revision: 21553 $
Author:
  James Strachan

### Nested Class Summary

Nested Classes
`static interface` `Verifier.DefaultArgsAction`

### Field Summary

Fields
`static String` `__TIMESTAMP`
`static String` `__TIMESTAMP__`
`static String` `SWAP_INIT`

### 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, 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, 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, INVOKEDYNAMIC_OWNER, 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

Constructors
Constructor and Description
`Verifier()`

### Method Summary

Methods
`protected void` `addClosureCode(InnerClassNode node)`
`protected void` `addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node)`
`protected void` `addCovariantMethods(ClassNode classNode)`
`protected void` `addDefaultParameterConstructors(ClassNode node)`
`protected void` `addDefaultParameterMethods(ClassNode node)` Creates a new helper method for each combination of default parameter expressions
`protected void` `addDefaultParameters(List methods, Verifier.DefaultArgsAction action)` Creates a new helper method for each combination of default parameter expressions
`protected void` `addDefaultParameters(Verifier.DefaultArgsAction action, MethodNode method)`
`protected void` `addFieldInitialization(List list, List staticList, FieldNode fieldNode, boolean isEnumClassNode, List initStmtsAfterEnumValuesInit, Set explicitStaticPropsInEnum)`
`protected void` `addGroovyObjectInterfaceAndMethods(ClassNode node, String classInternalName)`
`protected void` `addInitialization(ClassNode node)`
`protected void` `addInitialization(ClassNode node, ConstructorNode constructorNode)`
`protected void` `addMethod(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)` Helper method to add a new method to a ClassNode.
`protected void` `addPropertyMethod(MethodNode method)`
`protected void` `addReturnIfNeeded(MethodNode node)`
`protected void` `addTimeStamp(ClassNode node)`
`static String` `capitalize(String name)` Capitalizes the start of the given bean property name
`protected Statement` `createGetterBlock(PropertyNode propertyNode, FieldNode field)`
`protected Statement` `createSetterBlock(PropertyNode propertyNode, FieldNode field)`
`ClassNode` `getClassNode()`
`MethodNode` `getMethodNode()`
`static long` `getTimestamp(Class clazz)`
`void` `visitClass(ClassNode node)` add code to implement GroovyObject
`void` `visitConstructor(ConstructorNode node)`
`void` `visitField(FieldNode node)`
`void` `visitGenericType(GenericsType genericsType)`
`void` `visitMethod(MethodNode node)`
`void` `visitProperty(PropertyNode node)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### SWAP_INIT

    public static final String SWAP_INIT

See Also:
  Constant Field Values

#### __TIMESTAMP

    public static final String __TIMESTAMP

See Also:
  Constant Field Values

#### __TIMESTAMP__

    public static final String __TIMESTAMP__

See Also:
  Constant Field Values

### Constructor Detail

#### Verifier

    public Verifier()

### Method Detail

#### getClassNode

    public ClassNode getClassNode()

#### getMethodNode

    public MethodNode getMethodNode()

#### visitClass

    public void visitClass(ClassNode node)

add code to implement GroovyObject

Specified by:
  `visitClass` in interface `GroovyClassVisitor`
Parameters:
  `node` -

#### addGroovyObjectInterfaceAndMethods

    protected void addGroovyObjectInterfaceAndMethods(ClassNode node,
                                          String classInternalName)

#### addMethod

    protected void addMethod(ClassNode node,
                 boolean shouldBeSynthetic,
                 String name,
                 int modifiers,
                 ClassNode returnType,
                 Parameter[] parameters,
                 ClassNode[] exceptions,
                 Statement code)

Helper method to add a new method to a ClassNode. Depending on the shouldBeSynthetic flag the call will either be made to ClassNode.addSyntheticMethod() or ClassNode.addMethod(). If a non-synthetic method is to be added the ACC_SYNTHETIC modifier is removed if it has been accidentally supplied.

#### addTimeStamp

    protected void addTimeStamp(ClassNode node)

#### visitConstructor

    public void visitConstructor(ConstructorNode node)

Specified by:
  `visitConstructor` in interface `GroovyClassVisitor`

#### visitMethod

    public void visitMethod(MethodNode node)

Specified by:
  `visitMethod` in interface `GroovyClassVisitor`

#### addReturnIfNeeded

    protected void addReturnIfNeeded(MethodNode node)

#### visitField

    public void visitField(FieldNode node)

Specified by:
  `visitField` in interface `GroovyClassVisitor`

#### visitProperty

    public void visitProperty(PropertyNode node)

Specified by:
  `visitProperty` in interface `GroovyClassVisitor`

#### addPropertyMethod

    protected void addPropertyMethod(MethodNode method)

#### addDefaultParameterMethods

    protected void addDefaultParameterMethods(ClassNode node)

Creates a new helper method for each combination of default parameter expressions

#### addDefaultParameterConstructors

    protected void addDefaultParameterConstructors(ClassNode node)

#### addConstructor

    protected void addConstructor(Parameter[] newParams,
                      ConstructorNode ctor,
                      Statement code,
                      ClassNode node)

#### addDefaultParameters

    protected void addDefaultParameters(List methods,
                            Verifier.DefaultArgsAction action)

Creates a new helper method for each combination of default parameter expressions

#### addDefaultParameters

    protected void addDefaultParameters(Verifier.DefaultArgsAction action,
                            MethodNode method)

#### addClosureCode

    protected void addClosureCode(InnerClassNode node)

#### addInitialization

    protected void addInitialization(ClassNode node)

#### addInitialization

    protected void addInitialization(ClassNode node,
                         ConstructorNode constructorNode)

#### addFieldInitialization

    protected void addFieldInitialization(List list,
                              List staticList,
                              FieldNode fieldNode,
                              boolean isEnumClassNode,
                              List initStmtsAfterEnumValuesInit,
                              Set explicitStaticPropsInEnum)

#### capitalize

    public static String capitalize(String name)

Capitalizes the start of the given bean property name

#### createGetterBlock

    protected Statement createGetterBlock(PropertyNode propertyNode,
                              FieldNode field)

#### createSetterBlock

    protected Statement createSetterBlock(PropertyNode propertyNode,
                              FieldNode field)

#### visitGenericType

    public void visitGenericType(GenericsType genericsType)

#### getTimestamp

    public static long getTimestamp(Class clazz)

#### addCovariantMethods

    protected void addCovariantMethods(ClassNode classNode)