[
https://issues.apache.org/jira/browse/GROOVY-8409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King closed GROOVY-8409.
-----------------------------
> 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
> Fix For: 3.0.8, 4.0.0-beta-1
>
> 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.20.1#820001)