Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
A compilation error occurs when using static compilation and attempting to assign the result of a method that returns a parameterized argument that contains an array in the type parameter. The equivalent Java code has no issues.
Here is a specific example:
@CompileStatic class ArrayGenericsIssue { static void main(String[] args) { Optional<Integer[]> value = testArrayMethod(1) //This fails to compile } static <E> Optional<E[]> testArrayMethod(E ignored) { return Optional.empty() } }
The error returned is:
Error:(11, 33) Groovyc: [Static type checking] - Incompatible generic argument types. Cannot assign java.util.Optional <E[]> to: java.util.Optional <Integer[]>
The expected behavior is that this code would compile and run successfully with @CompileStatic enabled.
Note that equivalent code with a non-array generic parameter works just fine:
static void main(String[] args) { Optional<List<Integer>> value = testListMethod(1) } static <E> Optional<List<E>> testListMethod(E ignored) { return Optional.empty() }
Additionally, there is no compilation issue if the value is cast:
Optional<Integer[]> value = (Optional<Integer[]>) testArrayMethod(1)
For some context, I'm running into this issue when working with jOOQ, as some of its API involves working with array type parameters.