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

Shil Sinha commented on GROOVY-7971:
------------------------------------

This only seems to happen for calls to type-overloaded methods e.g. 
JsonOutput#toJson.

> @CS flow typing incorrectly casting to map at runtime
> -----------------------------------------------------
>
>                 Key: GROOVY-7971
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7971
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.7
>            Reporter: Graeme Rocher
>
> The following code:
> {code}
> import groovy.json.*
> import groovy.transform.*
> @CompileStatic
> class Bar {
>     private Writable renderTemplate(Object o, Map args) {
>     
>     }
>     private boolean isSimpleType(Class type) {
>         return type == String
>     }
>     def foo(Map map, Map arguments) {
>     
>         def writable = new Writable() {
>             @Override
>             Writer writeTo(Writer out) throws IOException {
>                 for(entry in map.entrySet()) {
>                    def value = entry.value
>                    if(isSimpleType(value.getClass()) || (value instanceof 
> Map)) {
>                         out.append(JsonOutput.toJson(value))
>                     }
>                 }
>                 return out
>             }
>         }
>     }
> }
> writable = new Bar().foo([one:'two'],[foo:'bar'])
> sw = new StringWriter()
> writable.writeTo(sw)
> println sw
> {code}
> Fails with:
> {code}
> org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast 
> object 'two' with class 'java.lang.String' to class 'java.util.Map'
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:405)
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319)
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232)
>       
> {code}
> For some reason Groovy is attempting to cast value to Map when it isn't one.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to