[ 
https://issues.apache.org/jira/browse/GROOVY-8538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16500104#comment-16500104
 ] 

Ian commented on GROOVY-8538:
-----------------------------

Confirmed fix in 2.5.0

Thank you very much!

> <T> static type checking, generics, and collect 
> ------------------------------------------------
>
>                 Key: GROOVY-8538
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8538
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.2.2
>         Environment: CentOS 7
> Gradle 4.6
>            Reporter: Ian
>            Priority: Major
>             Fix For: 2.5.0
>
>
> Broken between 2.2.2 and 2.4.15 (the latest I have access to).
>  
> {code:java}
> import groovy.transform.TypeChecked
> @TypeChecked
> class MyClass {
>     List<Foo<Bar<Float>>> ii = []
>     List<Bar<Float>> jj = ii.collect { Foo<Bar<Float>> it -> it.get() }
> }
> interface Foo<V> {
>     V get()
> }
> abstract class Bar<T> {}
> {code}
> Fails to compile with error:
>  
>  
> {code:java}
> MyClass.groovy: 6: [Static type checking] - Incompatible generic argument 
> types. Cannot assign java.util.List <Float> to: java.util.List <Bar>
> @ line 6, column 27.
> List<Bar<Float>> jj = ii.collect { Foo<Bar<Float>> it -> it.get() }
>                       ^
> {code}
> Note that if the type of Foo is changed to <T> it compiles successfully:
> {code:java}
> ...
> interface Foo<T> {
> T get()
> }
> abstract class Bar<T> {}
> {code}
> Also successfully compiles if the type of Bar is changed to anything else:
> {code:java}
> ...
> interface Foo<V> {
>     V get()
> }
> abstract class Bar<R> {}{code}
> So it seems there is something special in the use of <T> specifically that 
> makes this fail.
> This also seems to hold true for classes defined in different files.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to