You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/03/03 16:16:00 UTC
[jira] [Commented] (GROOVY-10405) @AutoClone breaks in Java17 for File properties
[ https://issues.apache.org/jira/browse/GROOVY-10405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17500857#comment-17500857 ]
Eric Milles commented on GROOVY-10405:
--------------------------------------
The issue lies in {{AutoClone}}'s "super.clone()" call to start out the cloning process. Under Java 17, the meta method index does not get {{methodForSuper}} populated for clone. Using {{@CompileStatic}} will create a direct method call in the bytecode instead of routing through {{ScriptBytecodeAdapter#invokeMethodOnSuper0}}.
> @AutoClone breaks in Java17 for File properties
> -----------------------------------------------
>
> Key: GROOVY-10405
> URL: https://issues.apache.org/jira/browse/GROOVY-10405
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 3.0.9
> Environment: Java11 vs Java17
> Windows10, Ubuntu
> Reporter: Aleks Tamarkin
> Priority: Major
> Fix For: 4.0.0-rc-1
>
>
> The following code works on Java11 but breaks on Java17
>
> {code:java}
> import groovy.transform.AutoClone
> @AutoClone
> class Foo {
> File file
> String string
> }
> def foo = new Foo(file: new File('bar'), string: 'qux')
> foo.clone()
> {code}
> The error is
> {code:java}
> groovy.lang.MissingMethodException: No signature of method: java.lang.Object.clone() is applicable for argument types: () values: []
> Possible solutions: collect(), collect(groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure), find(), any(), use([Ljava.lang.Object;){code}
> This can be reproduced in GroovyConsole
--
This message was sent by Atlassian Jira
(v8.20.1#820001)