Groovy - overriding invokeMethod for a single instance
groovy, metaprogramming
Solution
There might be a shorter route to the original method, but this should work:
def myList = [ 1, 2, 3 ]
myList.metaClass.invokeMethod { name, args ->
println "Called ${name} with ${args}"
delegate.class.metaClass.getMetaMethod( name, args )?.invoke( delegate, args )
}
myList.sum()
Problem
I have an instance of a java object, let's say an instance of ArrayList called myList. For this particular instance, I want to override the invokeMethod method to (say) log that method was called. I could do something like this: ``` myList.metaclass.invokeMethod { name, args -> println "Called ${name} with ${args}" whatGoesHere.invokeMethod(name, args) } ``` Notice the 2nd line of the closure - how can I call the original invokeMethod method? Am I going about this correctly?