groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul King (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-8255) Odd problems with flow typing and generics in Groovy 2.4.12+
Date Mon, 13 Nov 2017 12:12:00 GMT

    [ https://issues.apache.org/jira/browse/GROOVY-8255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16249478#comment-16249478
] 

Paul King commented on GROOVY-8255:
-----------------------------------

I was planning to close this issue with the proposed PR. The instanceof cases have already
been handled in other issues. If there are any remaining "Odd problems", they can be raised
as separate issues.

> Odd problems with flow typing and generics in Groovy 2.4.12+
> ------------------------------------------------------------
>
>                 Key: GROOVY-8255
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8255
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>    Affects Versions: 2.4.12
>            Reporter: Graeme Rocher
>
> In order to get the GORM codebase to compile I had to make this change:
> https://github.com/grails/grails-data-mapping/commit/1ef850c496d13d8ca915b27e76b6bfdb4e27377e
> The code in question is:
> {code}
>     /**
>      * Sets multipart values within the request body
>      *
>      * @param name The name of the multipart
>      * @param value The value of the multipart
>      */
>     void setProperty(String name, value) {
>         if (value instanceof File) {
>             value = new FileSystemResource(value)
>         }
>         else if (value instanceof URL) {
>             value = new UrlResource(value)
>         }
>         else if (value instanceof InputStream) {
>             value = new InputStreamResource(value)
>         }
>         else if (value instanceof GString) {
>             value = value.toString()
>         }
>         if( mvm[name] ) {
>             mvm[name].add value    
>         }
>         else {
>             mvm.put(name, [value]) // <--- FAILS COMPILATION HERE
>         }        
>     }
> {code}
> No matter what I tried I could not get it into to compile. The method accepts `put(String,
List<Object>)` but fails compilation with:
> {code}
> RequestCustomizer.groovy: 392: [Static type checking] - Cannot call org.springframework.util.MultiValueMap
<String, Object>#put(java.lang.String, java.lang.Object) with arguments [java.lang.String,
java.util.List <java.lang.String>] 
>  @ line 392, column 13.
>                mvm.put(name, [value])
>                ^
> {code}
> Altering the code to:
> {code}
>        List<Object> values = [value]
>        mvm.put(name, values)
> {code}
> Fails with:
> {code}
> RequestCustomizer.groovy: 392: [Static type checking] - Incompatible generic argument
types. Cannot assign java.util.List <java.lang.String> to: java.util.List <Object>
>  @ line 392, column 35.
>                List<Object> values = [value]
>                                      ^
> RequestCustomizer.groovy: 393: [Static type checking] - Cannot call org.springframework.util.MultiValueMap
<String, Object>#put(java.lang.String, java.lang.Object) with arguments [java.lang.String,
java.util.List <java.lang.String>] 
>  @ line 393, column 13.
>                mvm.put(name, values)
>                ^
> 2 errors
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message