Package 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 Description LegacyHashMapPropertyHandler()
-
Method Summary
Modifier and Type Method 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, List<PropertyNode> props)
Methods inherited from class groovy.transform.options.ImmutablePropertyHandler
checkFinalArgNotOverridden, cloneCollectionExpr, createAsImmutableX, createConstructorStatement, createConstructorStatement, createPropGetter, createPropSetter
Methods inherited from class groovy.transform.options.PropertyHandler
createPropertyHandler, isValidAttribute
-
Constructor Details
-
LegacyHashMapPropertyHandler
public LegacyHashMapPropertyHandler()
-
-
Method Details
-
validateAttributes
- Overrides:
validateAttributes
in classImmutablePropertyHandler
-
validateProperties
public boolean validateProperties(AbstractASTTransformation xform, BlockStatement body, ClassNode cNode, List<PropertyNode> props)- Overrides:
validateProperties
in classImmutablePropertyHandler
-
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 classImmutablePropertyHandler
- Parameters:
xform
- the transform being processedanno
- the '@ImmutableBase' annotation nodecNode
- the classnode containing the propertypNode
- the property node to initializenamedArgsMap
- an "args" Map if the property value should come from a named arg map or null if not
-