You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Svatopluk Dedic (Jira)" <ji...@apache.org> on 2021/09/15 12:23:00 UTC
[jira] [Updated] (GROOVY-10234) Groovyc throws Stackoverflow error
on generic class with lower bound
[ https://issues.apache.org/jira/browse/GROOVY-10234?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Svatopluk Dedic updated GROOVY-10234:
-------------------------------------
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:
{code:java}
import java.util.Optional;
@groovy.transform.CompileStatic
public interface AC <Impl extends AC> {
<T> Optional<T> convert(Object object, Class<T> targetType);
}
{code}
AA.groovy:
{code:java}
@groovy.transform.CompileStatic
class AA {
public <T> T getBean(Class<T> beanClass) {
return null;
}
void a() {
getBean(AC).convert(new ArrayList(), String).get();
}
}
{code}
When run as
{quote}*groovyc AC.java*
{quote}
*(*AC.class produced; using groovyc instead of javac as it auto includes groovy.transform on classpath)
{quote}{color:#172b4d}groovyc AA.groovy{color}
{quote}
the stacktrace is thrown / reported:
{code:java}
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)
...
{code}
Such patterns are IMHO easity to find in Spring or other IoCs as well.
was:
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:
{code:java}
import java.util.Optional;
@groovy.transform.CompileStatic
public interface AC <Impl extends AC> {
<T> Optional<T> convert(Object object, Class<T> targetType);
}
{code}
AA.groovy:
{code:java}
@groovy.transform.CompileStatic
class AA {
public <T> T getBean(Class<T> beanClass) {
return null;
}
void a() {
getBean(AC).convert(new ArrayList(), String).get();
}
}
{code}
When run as
{quote}*groovyc AC.java*
{quote}
*(*AC.class produced; using groovyc instead of javac as it autoimports groovy.transform)
{quote}{color:#172b4d}groovyc AA.groovy{color}
{quote}
the stacktrace is thrown / reported:
{code:java}
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)
...
{code}
Such patterns are IMHO easity to find in Spring or other IoCs as well.
> Groovyc throws Stackoverflow error on generic class with lower bound
> --------------------------------------------------------------------
>
> Key: GROOVY-10234
> URL: https://issues.apache.org/jira/browse/GROOVY-10234
> Project: Groovy
> Issue Type: Bug
> Components: Static compilation
> Affects Versions: 3.0.8
> Reporter: Svatopluk Dedic
> Priority: Major
>
> 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:
> {code:java}
> import java.util.Optional;
> @groovy.transform.CompileStatic
> public interface AC <Impl extends AC> {
> <T> Optional<T> convert(Object object, Class<T> targetType);
> }
> {code}
> AA.groovy:
>
> {code:java}
> @groovy.transform.CompileStatic
> class AA {
> public <T> T getBean(Class<T> beanClass) {
> return null;
> }
> void a() {
> getBean(AC).convert(new ArrayList(), String).get();
> }
> }
> {code}
> When run as
>
> {quote}*groovyc AC.java*
> {quote}
> *(*AC.class produced; using groovyc instead of javac as it auto includes groovy.transform on classpath)
> {quote}{color:#172b4d}groovyc AA.groovy{color}
> {quote}
> the stacktrace is thrown / reported:
> {code:java}
> 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)
> ...
> {code}
> Such patterns are IMHO easity to find in Spring or other IoCs as well.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)