You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Graeme Rocher (JIRA)" <ji...@apache.org> on 2016/10/14 08:01:20 UTC
[jira] [Created] (GROOVY-7971) @CS flow typing incorrectly casting
to map at runtime
Graeme Rocher created GROOVY-7971:
-------------------------------------
Summary: @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)