[ https://issues.apache.org/jira/browse/GROOVY-10503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17519883#comment-17519883 ]
Alexander Kriegisch commented on GROOVY-10503: ---------------------------------------------- [~paulk], are you saying that upgrading ASM would make anything worse than it is now? E.g. that Groovy code compiled with 2.5.x on e.g. Java 11 or 15 would run fine on Java 17 now with the older ASM version, but after upgrading ASM to 9.2 or 9.3, the same program would no longer run fine on JDK 17? Then and only then I would agree with your release strategy. In all other cases, e.g. now the code does not run on JDK 17 at all, because simply the Groovy runtime forbids it, and after upgrading ASM I could run it, but it might have problems, I would accept that, simply saying: "You can try running the application on JDK 16+, but it is completely unsupported." You would help a lot of people to do the things the could not do before, e.g. compile Java 11 code or the occasional dynamic script on JDK 17. All others would not lose anything. It would even help the Groovy dev team to get feedback about possible problems they are still unaware of. That would help them (including you) to prioritise work and to maybe decide to not put any effort into supporting more recent JVM platforms in Groovy 2.5.x at all, if the effort seems unreasonable. > 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 > > Attachments: javadoc-screenshot.png > > Time Spent: 2h 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)