LegacyHashMapPropertyHandler (Groovy 2.5.0)
Date: 2018-05-27

groovy.transform.options

## Class LegacyHashMapPropertyHandler

- java.lang.Object
- - groovy.transform.options.PropertyHandler
  - - groovy.transform.options.ImmutablePropertyHandler
    - - groovy.transform.options.LegacyHashMapPropertyHandler

-     public class LegacyHashMapPropertyHandler
      extends ImmutablePropertyHandler

  The `@Immutable` transformation in earlier versions of Groovy tried to be smart in the case of an immutable class with a single HashMap property, the supplied Map constructor tried to be compatible with both expected tuple behavior and expected named-argument behavior by peeking into the supplied map and guessing as to which approach might be applicable. Recent versions of Groovy now allow both `@TupleConstructor` and `@MapConstructor` annotations to co-exist which provide's a more flexible solution to this problem. While more flexible, the new approach isn't fully compatible with the previous approach. If for some reason you need the old behavior, you can try this property handler. Some features of the new approach won't be available to you.
  Since:
    2.5.0

- - ### Field Summary

    - ### Fields inherited from class groovy.transform.options.PropertyHandler

      `PROPERTY_OPTIONS_TYPE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `LegacyHashMapPropertyHandler()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Statement` | `createPropInit(AbstractASTTransformation xform, AnnotationNode anno, ClassNode cNode, PropertyNode pNode, Parameter namedArgsMap)` Create a statement that will initialize the property including any defensive copying.
    `boolean` | `validateAttributes(AbstractASTTransformation xform, AnnotationNode anno)`
    `boolean` | `validateProperties(AbstractASTTransformation xform, BlockStatement body, ClassNode cNode, java.util.List<PropertyNode> props)`

    - ### Methods inherited from class groovy.transform.options.ImmutablePropertyHandler

      `checkFinalArgNotOverridden, cloneCollectionExpr, createAsImmutableX, createConstructorStatement, createPropGetter, createPropSetter`

    - ### Methods inherited from class groovy.transform.options.PropertyHandler

      `createPropertyHandler, isValidAttribute`

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

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

- - ### Constructor Detail

    - #### LegacyHashMapPropertyHandler

          public LegacyHashMapPropertyHandler()

  - ### Method Detail

    - #### validateAttributes

          public boolean validateAttributes(AbstractASTTransformation xform,
                                            AnnotationNode anno)

      Overrides:
        `validateAttributes` in class `ImmutablePropertyHandler`

    - #### validateProperties

          public boolean validateProperties(AbstractASTTransformation xform,
                                            BlockStatement body,
                                            ClassNode cNode,
                                            java.util.List<PropertyNode> props)

      Overrides:
        `validateProperties` in class `ImmutablePropertyHandler`

    - #### createPropInit

          public Statement createPropInit(AbstractASTTransformation xform,
                                          AnnotationNode anno,
                                          ClassNode cNode,
                                          PropertyNode pNode,
                                          Parameter namedArgsMap)

      Description copied from class: `PropertyHandler`
      Create a statement that will initialize the property including any defensive copying. Null if no statement should be added.
      Overrides:
        `createPropInit` in class `ImmutablePropertyHandler`
      Parameters:
        `xform` - the transform being processed
        `anno` - the '@ImmutableBase' annotation node
        `cNode` - the classnode containing the property
        `pNode` - the property node to initialize
        `namedArgsMap` - an "args" Map if the property value should come from a named arg map or null if not