Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-7971

@CS flow typing incorrectly casting to map at runtime

    XMLWordPrintableJSON

Details

    • Bug
    • Status: In Progress
    • Major
    • Resolution: Unresolved
    • 2.4.7
    • None
    • None
    • None

    Description

      The following 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
      

      Fails with:

      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)
      	
      

      For some reason Groovy is attempting to cast value to Map when it isn't one.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              graemerocher1 Graeme Rocher
              Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 4h 10m
                  4h 10m