Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8342

Static compilation error with a method returning an array in a type parameter

    XMLWordPrintableJSON

Details

    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.

      Attachments

        Activity

          People

            paulk Paul King
            mjjustin M. Justin
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: