@Documented
 @Retention(value=SOURCE)
 @Target(value=TYPE)
public @interface ImmutableBase
@Immutable meta annotation.
 Custom property handling:
@ImmutableBase annotation supports customization using @PropertyOptions
 which allows a custom property handler to be defined. This is most typically used behind the scenes
 by the @Immutable meta-annotation but you can also define your own handler. If a custom
 handler is present, it will determine the code generated for the getters and setters of any property.Immutable, 
ImmutableOptions, 
MapConstructor, 
TupleConstructor, 
PropertyOptions| Modifier and Type | Optional Element and Description | 
|---|---|
| boolean | copyWithIf  true, this adds a methodcopyWithwhich takes a Map of
 new property values and returns a new instance of the Immutable class with
 these values set. | 
public abstract boolean copyWith
true, this adds a method copyWith which takes a Map of
 new property values and returns a new instance of the Immutable class with
 these values set.
 Example:
 
 @groovy.transform.Immutable(copyWith = true)
 class Person {
     String first, last
 }
 def tim   = new Person( 'tim', 'yates' )
 def alice = tim.copyWith( first:'alice' )
 assert tim.first   == 'tim'
 assert alice.first == 'alice'
 
 Unknown keys in the map are ignored, and if the values would not change
 the object, then the original object is returned.
 If a method called copyWith that takes a single parameter already
 exists in the class, then this setting is ignored, and no method is generated.