interceptor - How to generically wrap a setter in Groovy? -
i seek intercept setter calls dsl objects, can print warnings, when deprecated properties beingness used.
to avoid creating custom setters each deprecated property, i'd generically replace setters like:
void setfoo(value) { println "foo deprecated" actualsetfoo(value) }
i did seek numerous solutions found on net, either phone call did not intercepted, there stackoverflow because recursively called interceptor or actual setter not found.
my latest solution following:
string settername = 'set' + propertyname.capitalize() // returns expandometaproperty def original = extension.metaclass."$settername" extension.metaclass."$settername" << { arg -> println "property '$propertyname' has been deprecated" original.setproperty(propertyname, arg) }
but 1 throws groovy.lang.groovyruntimeexception: cannot value of write-only property '$property' on $class
each read access.
obviously still need adapt case, that's how works:
class { string text } something.metaclass.settext = { arg -> println 'depreceated' delegate.@text = arg } def = new something() something.text = 'value 123' println something.text
groovy interceptor
No comments:
Post a Comment