Hi folks, Anyone have any ideas here? Wondering if the lack of response is due to me phrasing the question badly, let me know if that's the case and I'll try and re-word?
Cheers, Edd On 1 June 2016 at 16:56, Edd Grant <e...@eddgrant.com> wrote: > Hi Folks, > > I am trying to control the behaviour exhibited by some of our POGOs when > they are created using a Map constructor which contains keys that do NOT > map to their properties e.g. > > class Person { > String name > } > > def person = new Person([name: 'Edd', age: 35]) > > Normally the above would call propertyMissing() however I have discovered > that I can define a trait (which the class then implements) and provide a > default implementation of this method e.g. > > trait LogsUnknownProperties implements GroovyInterceptable { > > private static final Logger LOGGER = > Logger.getLogger(LogsUnknownProperties) > > def propertyMissing(String name, value){ > LOGGER.warn("Class: ${this.class.name} - Could not set property > with name '${name}' having value '${value}' as property does not exist.") > } > } > > This works brilliantly in mutable POGOs, however for POGOs which are > annotated with @Immutable it doesn't work. From looking at the code in > ImmutableASTTransformation.java this seems to be because the > checkPropNames() method throws a MissingPropertyException: > > > https://github.com/groovy/groovy-eclipse/blob/master/base/org.codehaus.groovy20/src/org/codehaus/groovy/transform/ImmutableASTTransformation.java#L556 > > Is there any way I can intercept the throwing of this exception so I can > control the behaviour for @Immutable classes in the same way I can for > mutable ones? I wondered if it could be achieved with a sprinkling of > meta-programming but I'm not sure where to start looking? > > Many thanks, > > Edd > -- > Web: http://www.eddgrant.com > Email: e...@eddgrant.com > Mobile: +44 (0) 7861 394 543 > > -- Web: http://www.eddgrant.com Email: e...@eddgrant.com Mobile: +44 (0) 7861 394 543