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)

Reply via email to