Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
The following code works:
import groovy.transform.* @CompileStatic def method() { ['ab'.chars, '12'.chars].combinations().stream().collect((x, y) -> "$x$y").forEach{ println it } } method()
but if I make an error like this:
import groovy.transform.* @CompileStatic def method() { ['ab'.chars, '12'.chars].combinations().stream().map((x, y) -> "$x$y").forEach{ println it } } method()
I get the following error:
Exception thrown java.lang.BootstrapMethodError: call site initialization exception at java.lang.invoke.CallSite.makeSite(CallSite.java:341) at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307) at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297) at ConsoleScript33.method(ConsoleScript33:5) at ConsoleScript33.run(ConsoleScript33:9) at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:265) at groovy.lang.GroovyShell.run(GroovyShell.java:378) at groovy.lang.GroovyShell.run(GroovyShell.java:357) at groovy.lang.GroovyShell.run(GroovyShell.java:173) at groovy.lang.GroovyShell$run$0.call(Unknown Source) at groovy.ui.Console$_runScriptImpl_closure18.doCall(Console.groovy:1118) at groovy.ui.Console$_runScriptImpl_closure18.doCall(Console.groovy) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:103) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1037) at groovy.lang.Closure.call(Closure.java:419) at groovy.lang.Closure.call(Closure.java:413) at groovy.lang.Closure.run(Closure.java:500) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.invoke.LambdaConversionException: Incorrect number of parameters for instance method invokeVirtual ConsoleScript33$_method_lambda1.doCall:(ConsoleScript33,Object,Object)Object; 2 captured parameters, 1 functional interface method parameters, 3 implementation parameters at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:193) at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303) at java.lang.invoke.CallSite.makeSite(CallSite.java:302) ... 23 more
We should produce a sensible error message in this case.
Attachments
Issue Links
- is related to
-
GROOVY-6939 Calling "each" on an untyped model variable with two arguments causes doCall error
- Closed
- relates to
-
GROOVY-10963 AIOOBE with Java lambda syntax
- Closed
-
GROOVY-11089 STC: closure param type inference for array and list
- Closed
-
GROOVY-11092 STC: support coerced closure argument destructuring (for list and tuple)
- Closed
- links to