You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2018/10/10 17:11:00 UTC
[jira] [Comment Edited] (GROOVY-8342) Static compilation error with
a method returning an array in a type parameter
[ https://issues.apache.org/jira/browse/GROOVY-8342?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16645278#comment-16645278 ]
Eric Milles edited comment on GROOVY-8342 at 10/10/18 5:10 PM:
---------------------------------------------------------------
Down from the above method, in {{StaticTypeCheckingSupport}}:
{code:java}
private static GenericsType applyGenericsContext(Map<String, GenericsType> spec, GenericsType gt) {
if (gt.isPlaceholder()) { // returns false for "LE;" -- gt.getType() returns "E -> java.lang.Object[]"; placeholder is set on the component type
{code}
was (Author: emilles):
Down from the above method, in {{StaticTypeCheckingSupport}}:
{code:java}
private static GenericsType applyGenericsContext(Map<String, GenericsType> spec, GenericsType gt) {
if (gt.isPlaceholder()) { // returns false for "LE;" -- gt.getType() returns "T -> java.lang.Object[]"; placeholder is set on the component type
{code}
> 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
> Priority: Major
>
> 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
(v7.6.3#76005)