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: [email protected]
Mobile: +44 (0) 7861 394 543