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
      implements GroovyClassVisitor, org.objectweb.asm.Opcodes

  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
  - Invalid record component names
  Added code includes:
  - Methods needed to implement GroovyObject
  - Property accessor methods
  - Covariant methods
  - Additional methods/constructors as needed for default parameters
  - Lookup getter

- - ### 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 type)`
    `` | `protected void` | `addCovariantMethods(ClassNode classNode)`
    `` | `protected void` | `addDefaultConstructor(ClassNode node)`
    `` | `protected void` | `addDefaultParameterConstructors(ClassNode type)` Creates a new constructor for each combination of default parameter expressions.
    `` | `protected void` | `addDefaultParameterMethods(ClassNode type)` Creates a new method for each combination of default parameter expressions.
    `` | `protected void` | `addDefaultParameters(List<? extends MethodNode> 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 MethodNode` | `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` | `addMethod$$bridge(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)`
    `` | `protected void` | `addPropertyMethod(MethodNode method)`
    `` | `protected void` | `addReturnIfNeeded(MethodNode node)`
    `` | `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()`
    `` | `protected VariableNotFinalCallback` | `getFinalVariablesCallback()`
    `` | `public MethodNode` | `getMethodNode()`
    `` | `public static long` | `getTimestamp(Class<?> clazz)`
    `` | `public static Long` | `getTimestampFromFieldName(String fieldName)`
    `` | `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.
    `` | `public void` | `variableNotAlwaysInitialized(VariableExpression var)`
    `` | `public void` | `variableNotFinal(Variable var, Expression bexp)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visit(org.objectweb.asm.MethodVisitor mv)`
    `` | `public void` | `visitClass(ClassNode node)`
    `` | `public void` | `visitClosureExpression(ClosureExpression expression)`
    `` | `public void` | `visitClosureExpression(ClosureExpression ce)`
    `` | `public void` | `visitClosureExpression(ClosureExpression e)`
    `` | `public void` | `visitConstructor(ConstructorNode node)`
    `` | `public void` | `visitConstructorCallExpression(ConstructorCallExpression cce)`
    `` | `public void` | `visitConstructorCallExpression(ConstructorCallExpression call)`
    `` | `public void` | `visitConstructorCallExpression(ConstructorCallExpression call)`
    `` | `public void` | `visitField(FieldNode node)`
    `` | `public void` | `visitGenericType(GenericsType genericsType)`
    `` | `public void` | `visitMethod(MethodNode node)`
    `` | `public void` | `visitMethodCallExpression(MethodCallExpression mce)`
    `` | `public void` | `visitProperty(PropertyNode node)`
    `` | `public void` | `visitReturnStatement(ReturnStatement statement)`
    `` | `public void` | `visitVariableExpression(VariableExpression ve)`
    `` | `public void` | `visitVariableExpression(VariableExpression e)`
    `` | `public void` | `visitVariableExpression(VariableExpression e)`

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

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

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

    - #### protected void addDefaultParameterConstructors(ClassNode type)

      Creates a new constructor for each combination of default parameter expressions.

    - #### protected void addDefaultParameterMethods(ClassNode type)

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

    - #### protected void addDefaultParameters(List<? extends MethodNode> 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 MethodNode 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.

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

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

    - #### protected VariableNotFinalCallback getFinalVariablesCallback()

    - #### public MethodNode getMethodNode()

    - #### public static long getTimestamp(Class<?> clazz)

    - #### public static Long getTimestampFromFieldName(String fieldName)

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

    - #### @Override public void variableNotAlwaysInitialized(VariableExpression var)

    - #### @Override public void variableNotFinal(Variable var, Expression bexp)

    - #### @Override public void visit(org.objectweb.asm.MethodVisitor mv)

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

    - #### @Override public void visitClosureExpression(ClosureExpression expression)

    - #### @Override public void visitClosureExpression(ClosureExpression ce)

    - #### @Override public void visitClosureExpression(ClosureExpression e)

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

    - #### @Override public void visitConstructorCallExpression(ConstructorCallExpression cce)

    - #### @Override public void visitConstructorCallExpression(ConstructorCallExpression call)

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

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

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

    - #### @Override public void visitMethodCallExpression(MethodCallExpression mce)

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

    - #### @Override public void visitReturnStatement(ReturnStatement statement)

    - #### @Override public void visitVariableExpression(VariableExpression ve)

    - #### @Override public void visitVariableExpression(VariableExpression e)