M. Justin created GROOVY-8342:
---------------------------------
Summary: Static compilation error with a method returning an array
in a type parameter
Key: GROOVY-8342
URL: https://issues.apache.org/jira/browse/GROOVY-8342
Project: Groovy
Issue Type: Bug
Components: Static compilation
Reporter: M. Justin
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:
{code}@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()
}
}{code}
The error returned is:
{code}Error:(11, 33) Groovyc: [Static type checking] - Incompatible generic
argument types. Cannot assign java.util.Optional <E[]> to: java.util.Optional
<Integer[]>{code}
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:
{code}
static void main(String[] args) {
Optional<List<Integer>> value = testListMethod(1)
}
static <E> Optional<List<E>> testListMethod(E ignored) {
return Optional.empty()
}
{code}
Additionally, there is no compilation issue if the value is cast:
{code}Optional<Integer[]> value = (Optional<Integer[]>) testArrayMethod(1){code}
For some context, I'm running into this issue when working with
[jOOQ|https://www.jooq.org/], as some of its API involves working with array
type parameters.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)