[ 
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)

Reply via email to