Verifier (groovy 2.4.12 API)
Date: 2017-06-21

Package: org.codehaus.groovy.classgen

## [Java] Class Verifier

- org.codehaus.groovy.classgen.Verifier

- All Implemented Interfaces and Traits:
    GroovyClassVisitor, org.objectweb.asm.Opcodes

      public class Verifier
      extends Object

  Verifies the AST node and adds any default AST code before bytecode generation occurs. Checks include:

  - Methods with duplicate signatures
  - Duplicate interfaces
  - Reassigned final variables/parameters
  - Uninitialized variables
  - Bad code in object initializers or constructors
  - Mismatches in modifiers or return types between implementations and interfaces/abstract classes
  Added code includes:
  - Methods needed to implement GroovyObject
  - Property accessor methods
  - Covariant methods
  - Additional methods/constructors as needed for default parameters

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `interface` | `Verifier.DefaultArgsAction` |

  - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static String` | `DEFAULT_PARAMETER_GENERATED` |
    `static String` | `INITIAL_EXPRESSION` |
    `static String` | `STATIC_METACLASS_BOOL` |
    `static String` | `SWAP_INIT` |
    `static String` | `__TIMESTAMP` |
    `static String` | `__TIMESTAMP__` |

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `protected void` | `addClosureCode(InnerClassNode node)`
    `` | `protected void` | `addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node)`
    `` | `protected void` | `addCovariantMethods(ClassNode classNode)`
    `` | `protected void` | `addDefaultConstructor(ClassNode node)`
    `` | `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)` the code is: if (this.metaClass==null) { this.metaClass = this.
    `` | `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)`
    `` | `protected void` | `setClassNode(ClassNode classNode)`
    `` | `static ConstantExpression` | `transformToPrimitiveConstantIfPossible(ConstantExpression constantExpression)` When constant expressions are created, the value is always wrapped to a non primitive type.
    `` | `void` | `visitClass(ClassNode node)` walk the class
    `` | `void` | `visitConstructor(ConstructorNode node)`
    `` | `void` | `visitField(FieldNode node)`
    `` | `void` | `visitGenericType(GenericsType genericsType)`
    `` | `void` | `visitMethod(MethodNode node)`
    `` | `void` | `visitProperty(PropertyNode node)`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Field Detail

    - #### public static final String DEFAULT_PARAMETER_GENERATED

    - #### public static final String INITIAL_EXPRESSION

    - #### public static final String STATIC_METACLASS_BOOL

    - #### public static final String SWAP_INIT

    - #### public static final String __TIMESTAMP

    - #### public static final String __TIMESTAMP__

  - ### Method Detail

    - #### protected void addClosureCode(InnerClassNode node)

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

    - #### protected void addCovariantMethods(ClassNode classNode)

    - #### protected void addDefaultConstructor(ClassNode node)

    - #### 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)

      the code is: if (this.metaClass==null) { this.metaClass = this.$getStaticMetaClass return this.metaClass } else { return this.metaClass } with the optimization that the result of the first this.metaClass is duped on the operand stack and reused for the return in the else part

    - #### protected void addPropertyMethod(MethodNode method)

    - #### protected void addReturnIfNeeded(MethodNode node)

    - #### @Deprecated protected void addTimeStamp(ClassNode node)

    - #### public 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)

    - #### public ClassNode getClassNode()

    - #### public MethodNode getMethodNode()

    - #### public static long getTimestamp(Class clazz)

    - #### protected void setClassNode(ClassNode classNode)

    - #### public static ConstantExpression transformToPrimitiveConstantIfPossible(ConstantExpression constantExpression)

      When constant expressions are created, the value is always wrapped to a non primitive type. Some constant expressions are optimized to return primitive types, but not all primitives are handled. This method guarantees to return a similar constant expression but with a primitive type instead of a boxed type.

      Additionally, single char strings are converted to 'char' types.
      Parameters:
        `constantExpression` - a constant expression
      Returns:
        the same instance of constant expression if the type is already primitive, or a primitive constant if possible.

    - #### public void visitClass(ClassNode node)

      walk the class

      Parameters:
        `node` - the node to visit

    - #### public void visitConstructor(ConstructorNode node)

    - #### public void visitField(FieldNode node)

    - #### public void visitGenericType(GenericsType genericsType)

    - #### public void visitMethod(MethodNode node)

    - #### public void visitProperty(PropertyNode node)