[ https://issues.apache.org/jira/browse/GROOVY-8409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles reassigned GROOVY-8409: ----------------------------------- Assignee: Eric Milles > Static compilation with generic function wrapping BiFunction causes > GroovyCastException > --------------------------------------------------------------------------------------- > > Key: GROOVY-8409 > URL: https://issues.apache.org/jira/browse/GROOVY-8409 > Project: Groovy > Issue Type: Bug > Components: Static compilation > Affects Versions: 2.4.8, 2.4.13 > Environment: MacOS Sierra 10.12.6 > Reporter: Shon Vella > Assignee: Eric Milles > Priority: Critical > Attachments: Bug.groovy > > > I have a statically compiled class with a method that declares Generic type T > as it's return type and accepts a parameter of type > java.util.function.BiFunction also with return type T. It makes a call to the > passed in BiFunction and assigns the the result to a variable of type T. > {code:java} > static <T> T actionWrapperT(BiFunction<Date, URL, T> action) { > T result = action.apply(new Date(), new URL('http://www.example.com')) > // do something else here > return result > } > {code} > When actionWrapperT is called with runtime type T as something other than > Date (e.g. XXX), it causes a GroovyCastException. > {panel} > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object 'XXX@71b1176b' with class 'XXX' to class 'java.util.Date' > {panel} > because it incorrectly tries to cast result type to Date rather than to XXX. > It appears to me that the compiler is conflating generic type T as declared > for the generic method with generic type T as declared by BiFunction<T,U,R> > because if I change the name of the generic type of the generic method to R > (to match the return type name of BiFunction) or to some other name not used > by BiFunction, then it works correctly, but if I change it to U to match the > second parameter of the BiFunction then it fails trying to cast to the > BiFunction generic type U instead of the method generic type U. > Problem does not happen under normal compilation or with only type checking > enabled. > Attached file Bug.groovy reproduces the problem. -- This message was sent by Atlassian Jira (v8.3.4#803005)