[ 
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)

Reply via email to