Package: groovy.transform.options

## [Java] Class PropertyHandler

- groovy.transform.options.PropertyHandler

-     @Incubating
      public abstract class PropertyHandler
      extends Object

  Used to provide custom property handling when getting, setting or initializing properties.

  Since:
    2.5.0

- - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static ClassNode` | `PROPERTY_OPTIONS_TYPE` | Class node for PropertyOptions.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public Statement` | `createPropGetter(PropertyNode pNode)` Create the getter block used when reading the property including any defensive copying.
    `` | `public abstract Statement` | `createPropInit(AbstractASTTransformation xform, AnnotationNode anno, ClassNode cNode, PropertyNode pNode, Parameter namedArgMap)` Create a statement that will initialize the property including any defensive copying.
    `` | `public Statement` | `createPropSetter(PropertyNode pNode)` Create the setter block used when setting the property.
    `` | `public static PropertyHandler` | `createPropertyHandler(AbstractASTTransformation xform, GroovyClassLoader loader, ClassNode cNode)` Creates the property handler configured for the supplied class.
    `` | `protected boolean` | `isValidAttribute(AbstractASTTransformation xform, AnnotationNode anno, String memberName)` Checks whether the named annotation attribute is unsupported for this handler.
    `` | `public abstract boolean` | `validateAttributes(AbstractASTTransformation xform, AnnotationNode anno)` Validates annotation attributes supported by this handler.
    `` | `public boolean` | `validateProperties(AbstractASTTransformation xform, BlockStatement body, ClassNode cNode, List<PropertyNode> props)` Validates the properties selected for processing.

  - ### Inherited Methods Summary

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

- - ### Field Detail

    - #### public static final ClassNode PROPERTY_OPTIONS_TYPE

      Class node for PropertyOptions.

  - ### Method Detail

    - #### public Statement createPropGetter(PropertyNode pNode)

      Create the getter block used when reading the property including any defensive copying.

      Parameters:
        `pNode` - the property node

    - #### public abstract Statement createPropInit(AbstractASTTransformation xform, AnnotationNode anno, ClassNode cNode, PropertyNode pNode, Parameter namedArgMap)

      Create a statement that will initialize the property including any defensive copying. Null if no statement should be added.

      Parameters:
        `xform` - the transform being processed
        `anno` - the '@ImmutableBase' annotation node
        `cNode` - the classnode containing the property
        `pNode` - the property node to initialize
        `namedArgMap` - an "args" Map if the property value should come from a named arg map or null if not

    - #### public Statement createPropSetter(PropertyNode pNode)

      Create the setter block used when setting the property. Can be null for read-only properties.

      Parameters:
        `pNode` - the property node

    - #### public static PropertyHandler createPropertyHandler(AbstractASTTransformation xform, GroovyClassLoader loader, ClassNode cNode)

      Creates the property handler configured for the supplied class.

      Parameters:
        `xform` - the active transform
        `loader` - the class loader used to instantiate custom handlers
        `cNode` - the class being transformed
      Returns:
        the configured property handler, or `null` if one could not be created

    - #### protected boolean isValidAttribute(AbstractASTTransformation xform, AnnotationNode anno, String memberName)

      Checks whether the named annotation attribute is unsupported for this handler.

      Parameters:
        `xform` - the active transform
        `anno` - the annotation being processed
        `memberName` - the attribute name to validate
      Returns:
        `true` if the attribute is valid for this handler

    - #### public abstract boolean validateAttributes(AbstractASTTransformation xform, AnnotationNode anno)

      Validates annotation attributes supported by this handler.

      Parameters:
        `xform` - the active transform
        `anno` - the property options annotation
      Returns:
        `true` if validation succeeds

    - #### public boolean validateProperties(AbstractASTTransformation xform, BlockStatement body, ClassNode cNode, List<PropertyNode> props)

      Validates the properties selected for processing.

      Parameters:
        `xform` - the active transform
        `body` - the statement block being generated
        `cNode` - the owning class
        `props` - the candidate properties
      Returns:
        `true` if validation succeeds