[ 
https://issues.apache.org/jira/browse/GROOVY-11719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18009011#comment-18009011
 ] 

ASF GitHub Bot commented on GROOVY-11719:
-----------------------------------------

jonnybot0 closed pull request #2270: GROOVY-11719 - Fix generics handling error
URL: https://github.com/apache/groovy/pull/2270




> Generics Compilation Bug
> ------------------------
>
>                 Key: GROOVY-11719
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11719
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.28
>            Reporter: Jonny Carter
>            Priority: Major
>
> In some cases when compiling scripts dealing with generic classes, the 
> {{ResolveVisitor}} can throw an {{UnsupportedOperationException}} by trying 
> to put entries in an immutable empty map.
> This is the same issue I raised on the [release thread for 
> 4.0.28|https://lists.apache.org/thread/3srdsx4q3ktmxq5rb3t6jhon7qdfvcwb].
> Raised a PR with an automated test to reproduce the issue at 
> [https://github.com/apache/groovy/pull/2270], along with a suggested fix. The 
> test to reproduce the error looks like this:
> {code:java}
>     @Test
>     void testRecompilingWithGenericsAndConstants() {
>         MapFileSystem.instance.modFile('BaseClass.groovy', 'class 
> BaseClass<T> {}', gse.@time)
>         def tertiaryClassText = '''
>             class NotGeneric {
>                 /**
>                  * Not typed on purpose - if typed as String then NotGeneric 
> is no longer a dependency of
>                  * ParameterisedClass for some reason...
>                  */
>                 public static final Object CONSTANT = "not generic"
>             }
>         '''
>         MapFileSystem.instance.modFile('NotGeneric.groovy', 
> tertiaryClassText, gse.@time)
>         def subClassText = '''
>             class SubClass extends BaseClass<String> {
>                 public static final String CONSTANT = NotGeneric.CONSTANT
>             }
>         '''
>         MapFileSystem.instance.modFile('SubClass.groovy', subClassText, 
> gse.@time)
>         MapFileSystem.instance.modFile('scriptUsingGeneric.groovy', 
> 'SubClass.CONSTANT', gse.@time)
>         gse.loadScriptByName('scriptUsingGeneric.groovy')
>         sleep 1000
>         // make a change to the sub-class so that it gets recompiled
>         MapFileSystem.instance.modFile('SubClass.groovy', subClassText + 
> '\n', gse.@time)
>         gse.loadScriptByName('scriptUsingGeneric.groovy')
>     }
> {code}
> The root cause error is:
> {code:java}
> Caused by: java.lang.UnsupportedOperationException at 
> java.base/java.util.AbstractMap.put(AbstractMap.java:209)
>  at 
> org.codehaus.groovy.control.ResolveVisitor.resolveGenericsHeader(ResolveVisitor.java:1452)
>  at 
> org.codehaus.groovy.control.ResolveVisitor.resolveGenericsHeader(ResolveVisitor.java:1409)
>  
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to