[ https://issues.apache.org/jira/browse/GROOVY-11192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17777548#comment-17777548 ]
ASF GitHub Bot commented on GROOVY-11192: ----------------------------------------- yuhengfdada commented on PR #1970: URL: https://github.com/apache/groovy/pull/1970#issuecomment-1771993296 > Generics is a very tricky area of the compiler. The diamond inference may assume that the target type's generics exactly correspond to the constructor type's generics. I don't think the `>` check is sufficient. You may have a type like "class C<V,K> implements Map<K,V>". Can you share a bit more on `You may have a type like "class C<V,K> implements Map<K,V>`? This PR is about when subclasses have less type parameters. Are you suggesting the compiler might wrongly inference class C as <K,V> instead of <V, K>? > Code that causes Groovy Compiler Crash > -------------------------------------- > > Key: GROOVY-11192 > URL: https://issues.apache.org/jira/browse/GROOVY-11192 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 4.0.15 > Environment: I am running on MacBook Pro, but I think this is a > probably regardless of environment. I have been able to repeat this bug for > Groovy versions from 3.0.10 to 4.0.15 and all in between. > Reporter: John DeRegnaucourt > Priority: Major > Labels: Generics, compiler, crash, parametize, type > Attachments: MapLong-3.groovy, > TestCompilerCrashOnTemplateArgCount.groovy > > > When attempting to compile the code below, it causes the Groovy compiler to > crash with: > java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 > at > org.codehaus.groovy.ast.tools.GenericsUtils.createGenericsSpec(GenericsUtils.java:494) > at > org.codehaus.groovy.ast.tools.GenericsUtils.createGenericsSpec(GenericsUtils.java:480) > at > org.codehaus.groovy.ast.tools.GenericsUtils.parameterizeType(GenericsUtils.java:293) > > The crash is caused because the GenericType parameter is missing on line 9 in > TestCompilerCrashOnTemplateArgCount: > private Map<Long, String> map = new MapLong<>() // causes compiler crash > ...but > private Map<Long, String> map2 = new MapLong<String>() // doest not cause > compiler crash > > The compiler is expecting one argument, but a no argument array was > allocated. When it attempts to access the array at element [0], the compiler > hits ArrayOutOfBoundsException. > > This is super easy to repeat with the two tiny source files attached. -- This message was sent by Atlassian Jira (v8.20.10#820010)