Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.3.1
-
None
-
None
Description
Executed in a Groovy console, in 2.3.1 version, the script bellow throws a org.codehaus.groovy.runtime.typehandling.GroovyCastException exception, but not with Groovy 2.3.0.
The script:
import java.security.AccessController import java.security.PrivilegedAction static void injectVariables(final def instance, def variables) { instance.class.declaredFields.each { field -> if (variables[field.name]) { AccessController.doPrivileged(new PrivilegedAction() { @Override public Object run() { boolean wasAccessible = field.isAccessible() try { field.accessible = true field.set(instance, variables[field.name]) return null; // return nothing... } catch (IllegalArgumentException | IllegalAccessException ex) { throw new IllegalStateException("Cannot set field: " + field, ex) } finally { field.accessible = wasAccessible } } }) } } } class Test { def p } def t = new Test() injectVariables(t, ['p': 'q'])
The exception:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'class ConsoleScript8' with class 'java.lang.Class' to class 'ConsoleScript8' at ConsoleScript8$_injectVariables_closure1.doCall(ConsoleScript8:7) at ConsoleScript8.injectVariables(ConsoleScript8:5) at ConsoleScript8$injectVariables.callStatic(Unknown Source) at ConsoleScript8.run(ConsoleScript8:32