Class 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 provides 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
  • Constructor Details

    • LegacyHashMapPropertyHandler

      public LegacyHashMapPropertyHandler()
  • Method Details

    • validateAttributes

      public boolean validateAttributes(AbstractASTTransformation xform, AnnotationNode anno)
      Validates annotation attributes supported by this handler.
      Overrides:
      validateAttributes in class ImmutablePropertyHandler
      Parameters:
      xform - the active transform
      anno - the property options annotation
      Returns:
      true if validation succeeds
    • validateProperties

      public boolean validateProperties(AbstractASTTransformation xform, BlockStatement body, ClassNode cNode, List<PropertyNode> props)
      Validates the properties selected for processing.
      Overrides:
      validateProperties in class ImmutablePropertyHandler
      Parameters:
      xform - the active transform
      body - the statement block being generated
      cNode - the owning class
      props - the candidate properties
      Returns:
      true if validation succeeds
    • createPropInit

      public Statement createPropInit(AbstractASTTransformation xform, AnnotationNode anno, ClassNode cNode, PropertyNode pNode, Parameter namedArgsMap)
      Create a statement that will initialize the property including any defensive copying. Return null to indicate that no initialization statement should be emitted for this property; this is distinct from returning an empty block and skips the corresponding entry in the generated constructor body altogether.
      Overrides:
      createPropInit in class ImmutablePropertyHandler
      Parameters:
      xform - the transform being processed
      anno - the 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