Currently classes annotated with @Immutable are not allowed to create their own constructor. Instead a map-based and an ordered-based constructor is added by the ImmutableASTTransformation
However it would be great if there was some way to validate the arguments that are used to populate the immatable object. This would allow the developer to use @Immutable to build value objects allowing them to assert that certain properties are set, certain properties have a certain value, etc...
A way of implementing this improvement that I can think of is to allow the developer to create his own constructor, relying on the skills of the developer to keep the object immutable
Another way would be to allow the developer to specify an 'afterPropertiesSet' method in the @Immutable annotation f.e.
This method would be called in the constructors as the last statement.
Perhaps other solutions exist as well.