[ https://issues.apache.org/jira/browse/GROOVY-10450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17687369#comment-17687369 ]
Alexander Kriegisch edited comment on GROOVY-10450 at 2/11/23 6:31 AM: ----------------------------------------------------------------------- [~emilles], are you sure this is fixed in 3.0.15? I tried my example, now also printing the Groovy version, and failed just like before: {code} [INFO] --- exec-maven-plugin:3.0.0:java (run-groovy-example) @ Spock_GH_1412 --- Java version: 17 Groovy version: 3.0.15 [WARNING] java.lang.IllegalAccessException: module jdk.proxy1 does not open jdk.proxy1 to unnamed module @591d23cb at java.lang.invoke.MethodHandles.privateLookupIn (MethodHandles.java:259) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.groovy.vmplugin.v9.Java9.of (Java9.java:163) at org.codehaus.groovy.vmplugin.v9.Java9.getInvokeSpecialHandle (Java9.java:177) at org.codehaus.groovy.runtime.ConversionHandler.lambda$invoke$0 (ConversionHandler.java:97) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent (ConcurrentHashMap.java:1708) at org.codehaus.groovy.runtime.ConversionHandler.invoke (ConversionHandler.java:96) at jdk.proxy1.$Proxy37.negate (Unknown Source) at java_util_function_BiPredicate$negate.call (Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:125) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:130) at CombineBiPredicatesAndClosures.main (CombineBiPredicatesAndClosures.groovy:26) at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254) at java.lang.Thread.run (Thread.java:833) {code} Please either reopen and fix or let me know what I might be doing wrong. Thank you. was (Author: kriegaex): [~emilles], are you sure this is fixed in 3.0.15? I tried my example, now also printing the Groovy version, and failed just like before: {code} [INFO] --- exec-maven-plugin:3.0.0:java (run-groovy-example) @ Spock_GH_1412 --- Java version: 17 Groovy version: 3.0.15 [WARNING] java.lang.IllegalAccessException: module jdk.proxy1 does not open jdk.proxy1 to unnamed module @591d23cb at java.lang.invoke.MethodHandles.privateLookupIn (MethodHandles.java:259) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.groovy.vmplugin.v9.Java9.of (Java9.java:163) at org.codehaus.groovy.vmplugin.v9.Java9.getInvokeSpecialHandle (Java9.java:177) at org.codehaus.groovy.runtime.ConversionHandler.lambda$invoke$0 (ConversionHandler.java:97) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent (ConcurrentHashMap.java:1708) at org.codehaus.groovy.runtime.ConversionHandler.invoke (ConversionHandler.java:96) at jdk.proxy1.$Proxy37.negate (Unknown Source) at java_util_function_BiPredicate$negate.call (Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:125) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:130) at CombineBiPredicatesAndClosures.main (CombineBiPredicatesAndClosures.groovy:26) at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254) at java.lang.Thread.run (Thread.java:833) {code} > Cannot call BiPredicate methods on closures or lambdas on JRE 16+ > ----------------------------------------------------------------- > > Key: GROOVY-10450 > URL: https://issues.apache.org/jira/browse/GROOVY-10450 > Project: Groovy > Issue Type: Bug > Affects Versions: 3.0.9 > Reporter: Alexander Kriegisch > Assignee: Eric Milles > Priority: Major > Fix For: 3.0.15 > > > The issue was first discovered by a Spock user in > [Spock-1412|https://github.com/spockframework/spock/issues/1412]. > Under Groovy 3.0.9, the following code works on JREs 8-15, but starts failing > on 16+, possibly due to [JEP 396 (Strongly Encapsulate JDK Internals by > Default)|https://openjdk.java.net/jeps/396]: > {code:groovy} > import java.util.function.BiPredicate > class CombineBiPredicatesAndClosures { > static void main(String[] args) { > println "Java version: ${System.properties['java.version']}" > // Old-school anonymous class instead of closure or lambda > /* > BiPredicate<String, Integer> bi = new BiPredicate<String, Integer>() { > @Override > boolean test(String domain, Integer score) { > return domain.equalsIgnoreCase("google.com") > } > } > */ > // Lambda syntax only works in Groovy 3+ > //BiPredicate<String, Integer> bi = (domain, score) -> > domain.equalsIgnoreCase("google.com") > //def bi2 = (domain, score) -> score == 11 > // Closure syntax works in Groovy 2.5, too > BiPredicate<String, Integer> bi = { domain, score -> > domain.equalsIgnoreCase("google.com") } > def bi2 = { domain, score -> score == 11 } > def logicalNot = bi.negate() > assert logicalNot.test("acme.org", 11) > assert !logicalNot.test("google.com", 11) > def logicalOr = bi | bi2 > assert logicalOr.test("google.com", 11) > assert logicalOr.test("google.com", 0) > assert logicalOr.test("x", 11) > assert !logicalOr.test("x", 0) > def logicalAnd = bi & bi2 > assert logicalAnd.test("google.com", 11) > assert !logicalAnd.test("google.com", 0) > assert !logicalAnd.test("x", 11) > assert !logicalAnd.test("x", 0) > } > } > {code} > Running the program yields something like: > {code:none} > Java version: 16 > Exception in thread "main" java.lang.reflect.InvocationTargetException > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at org.codehaus.groovy.vmplugin.v9.Java9.of(Java9.java:160) > at > org.codehaus.groovy.vmplugin.v9.Java9.getInvokeSpecialHandle(Java9.java:179) > at > org.codehaus.groovy.runtime.ConversionHandler.lambda$invoke$0(ConversionHandler.java:97) > at > java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) > at > org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:97) > at jdk.proxy1/jdk.proxy1.$Proxy9.negate(Unknown Source) > at java_util_function_BiPredicate$negate.call(Unknown Source) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130) > at > CombineBiPredicatesAndClosures.main(CombineBiPredicatesAndClosures.groovy:25) > Caused by: java.lang.IllegalAccessException: module jdk.proxy1 does not open > jdk.proxy1 to unnamed module @153f5a29 > at > java.base/java.lang.invoke.MethodHandles.privateLookupIn(MethodHandles.java:260) > ... 15 more > {code} > When running the same program on Groovy 4.0.0-rc-2, there are no problems on > JDK 16+. Using the commented-out anonymous class instead of either a lambda > or closure also works around the problem on Groovy 3. > Could you please fix this for the next 3.0.x version? Thank you. -- This message was sent by Atlassian Jira (v8.20.10#820010)