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

Groovyc throws Stackoverflow error on generic class with lower bound

    XMLWordPrintableJSON

Details

    Description

      Groovy suffers java.lang.StackOverflowError when working with generics. I encountered this one when running @CompileStatic visitor on https://github.com/micronaut-projects/micronaut-core/blob/3.0.x/http-server-netty/src/test/groovy/io/micronaut/http/server/netty/converters/ConverterRegistrySpec.groovy#L37

       

      I've isolated it down to two files:

      AC.java:

      import java.util.Optional;
      
      @groovy.transform.CompileStatic
      public interface AC <Impl extends AC> {
          <T> Optional<T> convert(Object object, Class<T> targetType);
      }
      
      

      AA.groovy:

       

      @groovy.transform.CompileStatic
      
      class AA {
          public <T> T getBean(Class<T> beanClass) {
              return null;
          }
      
          void a() {
              getBean(AC).convert(new ArrayList(), String).get();   
          }  
      } 
      
      

      When run as

       

      groovyc AC.java

      *(*AC.class produced; using groovyc instead of javac as it auto includes groovy.transform on classpath)

      groovyc AA.groovy

      the stacktrace is thrown / reported:

      java.lang.StackOverflowError
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isUsingGenericsOrIsArrayUsingGenerics(StaticTypeCheckingSupport.java:1263)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1863)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1857)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1813)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1802)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1872)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1857)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1813)
              at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.applyGenericsContext(StaticTypeCheckingSupport.java:1802)
      ...
      
      

      Such patterns are IMHO easity to find in Spring or other IoCs as well.

       

       

      Attachments

        Issue Links

          Activity

            People

              emilles Eric Milles
              sdedic Svatopluk Dedic
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 0.5h
                  0.5h