Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.0.5, 2.5.13
-
None
-
None
Description
There appears to be a regression in Groovy 2.5.13. It can be reproduced with the following script:
import groovy.util.logging.Log import java.lang.reflect.Method import java.util.function.Consumer import net.sf.cglib.proxy.MethodInterceptor import net.sf.cglib.proxy.MethodProxy import net.sf.cglib.proxy.Enhancer @Log @Grab("cglib:cglib:3.3.0") class Thing { void method() { Runnable nested = { log.info("hello") } nested.run() } } def enhancer = new Enhancer() enhancer.superclass = Thing enhancer.callback = { obj, method, args, proxy -> proxy.invokeSuper(obj, args); } as MethodInterceptor def proxy = enhancer.create() proxy.method()
When run with Groovy 2.5.12, hello is logged:
$ sdk use groovy 2.5.12 Using groovy version 2.5.12 in this shell. $ groovy logging.groovy Jul 23, 2020 10:20:05 AM java_util_logging_Logger$info$0 call INFO: hello
With Groovy 2.5.13, the log field cannot be found:
$ sdk use groovy 2.5.13 Using groovy version 2.5.13 in this shell. $ groovy logging.groovy Caught: groovy.lang.MissingPropertyException: No such property: log for class: Thing$$EnhancerByCGLIB$$ac2265fe groovy.lang.MissingPropertyException: No such property: log for class: Thing$$EnhancerByCGLIB$$ac2265fe at net.sf.cglib.proxy.MethodProxy$invokeSuper.call(Unknown Source) at logging$_run_closure1.doCall(logging.groovy:24) at com.sun.proxy.$Proxy16.intercept(Unknown Source) at Thing$$EnhancerByCGLIB$$ac2265fe.getProperty(<generated>) at Thing$_method_closure1.doCall(logging.groovy:14) at Thing$_method_closure1.doCall(logging.groovy) at Thing.method(logging.groovy:16) at Thing$$EnhancerByCGLIB$$ac2265fe.CGLIB$method$0(<generated>) at Thing$$EnhancerByCGLIB$$ac2265fe$$FastClassByCGLIB$$704960d8.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at net.sf.cglib.proxy.MethodProxy$invokeSuper.call(Unknown Source) at logging$_run_closure1.doCall(logging.groovy:24) at com.sun.proxy.$Proxy16.intercept(Unknown Source) at Thing$$EnhancerByCGLIB$$ac2265fe.method(<generated>) at Thing$$EnhancerByCGLIB$$ac2265fe$method.call(Unknown Source) at logging.run(logging.groovy:28)
The problem does not occur if Thing is not proxied or when trying to access a field that explicit declared rather than being created via @Log.