You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Alexander Kriegisch (Jira)" <ji...@apache.org> on 2022/02/22 05:01:00 UTC

[jira] [Comment Edited] (GROOVY-10503) Embed ASM 9.2 in Groovy 2.5.x

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

Alexander Kriegisch edited comment on GROOVY-10503 at 2/22/22, 5:00 AM:
------------------------------------------------------------------------

For the first time, I cloned the Groovy repository and patched something. For me [GitHub PR #1690|https://github.com/apache/groovy/pull/1690] fixes the problem. I know that GitHub is just a mirror, but you can easily check out my fork's feature branch and push to your own upstream repository. Because I have contributed to other Apache projects before, we have no intellectual property problems, because I am accepting the licence the Apache Groovy project is under.

I would appreciate a swift new 2.5.16 release, because this could potentially also fix problems when compiling Groovy 2.5 projects on JDK 16+ in IDEs such as IntelliJ, as soon as they also upgrade to the new version.


was (Author: kriegaex):
For the first time, I cloned the Groovy repository and patched something. For me [GitHub PR #1690|https://github.com/apache/groovy/pull/1690] fixes the problem. I know that GitHub is just a mirror, but you can easily check out my fork's feature branch and push to your own upstream repository. Because I have contributed to other Apache projects before, we have no intellectual property problems, because I am accepting the licence the Apache Groovy project is under.

> Embed ASM 9.2 in Groovy 2.5.x
> -----------------------------
>
>                 Key: GROOVY-10503
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10503
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Compiler
>    Affects Versions: 2.5.15
>            Reporter: Alexander Kriegisch
>            Priority: Major
>             Fix For: 2.5.x
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When compiling Groovy scripts in a Groovy project running under JDK 16+, there are error messages like:
> {code:groovy}
> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> General error during class generation: Unsupported class file major version 61
> java.lang.IllegalArgumentException: Unsupported class file major version 61
> 	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:196)
> 	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:177)
> 	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:163)
> 	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:284)
> 	at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
> 	at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:251)
> 	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
> 	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
> 	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
> 	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
> 	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
> 	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveNonArrayType(AsmReferenceResolver.java:79)
> 	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveType(AsmReferenceResolver.java:70)
> 	at org.codehaus.groovy.ast.decompiled.MemberSignatureParser.createMethodNode(MemberSignatureParser.java:57)
> 	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode$2.get(DecompiledClassNode.java:234)
> 	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode$2.get(DecompiledClassNode.java:231)
> 	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.createMethodNode(DecompiledClassNode.java:242)
> 	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitMembers(DecompiledClassNode.java:199)
> 	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getDeclaredField(DecompiledClassNode.java:116)
> 	at org.codehaus.groovy.classgen.Verifier.getMetaClassField(Verifier.java:195)
> 	at org.codehaus.groovy.classgen.Verifier.addGroovyObjectInterfaceAndMethods(Verifier.java:411)
> 	at org.codehaus.groovy.classgen.Verifier.visitClass(Verifier.java:246)
> 	at org.codehaus.groovy.control.CompilationUnit$18.call(CompilationUnit.java:811)
> 	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1084)
> 	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:640)
> 	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:618)
> 	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:595)
> 	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:401)
> 	at groovy.lang.GroovyClassLoader.access$300(GroovyClassLoader.java:89)
> 	at groovy.lang.GroovyClassLoader$5.provide(GroovyClassLoader.java:341)
> 	at groovy.lang.GroovyClassLoader$5.provide(GroovyClassLoader.java:338)
> 	at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:147)
> 	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:336)
> 	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:320)
> 	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:262)
> 	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:272)
> 	at groovy.lang.GroovyClassLoader$parseClass$0.call(Unknown Source)
> 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
> 	at spock.util.EmbeddedSpecCompiler.doCompile(EmbeddedSpecCompiler.groovy:101)
> 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
> 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> 	at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
> 	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:190)
> 	at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:58)
> 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:156)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:168)
> 	at spock.util.EmbeddedSpecCompiler.compile(EmbeddedSpecCompiler.groovy:76)
> 	at spock.util.EmbeddedSpecCompiler$compile.call(Unknown Source)
> 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
> 	at spock.util.EmbeddedSpecRunner.run(EmbeddedSpecRunner.groovy:92)
> 	at spock.util.EmbeddedSpecRunner$run.call(Unknown Source)
> 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
> 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
> 	at de.scrum_master.gitter.spock.d20210706.EmbeddedSpecRunnerTest.$spock_feature_0_0(EmbeddedSpecRunnerTest.groovy:28)
> {code}
> * Even when setting system property {{groovy.target.bytecode}} to a value like {{1.8}} on the command line
> * and using code fully compatible with the target bytecode level,
> * and even though the used {{GroovyClassLoader}} has a {{CompilerConfiguration}} with the correct {{targetBytecode}} (I checked, printing it before calling the script compiler),
> errors like the above occur, probably because the compiler somehow needs to analyse/decompile JRE classes.
> If the embedded ASM version relocated to the {{groovyjarjarasm.asm}} package would be upgraded to the current ASM 9.2, I think the problem should go away while being fully backwards compatible. I am not asking for target 16 or 17 compilation support (even though that should in theory be possible, even without supporting Java 16/17 source code features), only for the compiler being able to at least understand existing Java 16/17 byte code. I am assuming this to be trivial to implement and am expecting all existing tests to still pass, except maybe for some negative tests testing for the above error message, if you have any such tests.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)