[ https://issues.apache.org/jira/browse/GROOVY-8975?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16770785#comment-16770785 ]
Paul King commented on GROOVY-8975: ----------------------------------- I seem to get slightly different behavior with pre-compiled classes and classes in the same compilation unit. In any case, this script in the GroovyConsole replicates the problem: {code:java} import groovy.cli.Option import groovy.cli.Unparsed import groovy.cli.picocli.CliBuilder interface IHello { @Option(shortName='h', description='display usage') Boolean help() @Option(shortName='u', description='user name') String user() @Unparsed(description = 'positional parameters') List remaining() } def cli = new CliBuilder(name: 'groovy Greeter') def argz = '--user abc'.split() IHello hello = cli.parseFromSpec(IHello, argz) assert hello.user() == 'abc' {code} If I change the last line in {{CliBuilder#parseFromSpec}} as follows, it fixes the problem: {code} - cliOptions as T + DefaultGroovyMethods.asType(cliOptions, optionsClass) {code} It's an easy enough change but I wonder whether there is some underlying behavioral change elsewhere that is surfacing here and requiring this change. > GroovyCastException on the result of CliBuilder.parseFromSpec > ------------------------------------------------------------- > > Key: GROOVY-8975 > URL: https://issues.apache.org/jira/browse/GROOVY-8975 > Project: Groovy > Issue Type: Bug > Components: groovy-runtime > Affects Versions: 2.5.5 > Reporter: Mauro Molinari > Assignee: Remko Popma > Priority: Major > Attachments: GROOVY-8975.zip > > > I'm trying to follow the tutorial about the use of CliBuilder in Groovy with > Groovy 2.5.5. Copying the code at [Annotating methods of an > interface|https://github.com/remkop/picocli/wiki/Groovy-2.5-CliBuilder-Renewal#annotating-methods-of-an-interface] > paragraph, at runtime I have the following Exception: > {noformat} > Exception in thread "main" > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object > '{help=groovy.cli.picocli.CliBuilder$_extractAttributesFromMethod_closure12@3bb9a3ff}' > with class 'java.util.LinkedHashMap' to class 'mypackage.IHello' due to: > groovy.lang.GroovyRuntimeException: Could not find matching constructor for: > mypackage.IHello(LinkedHashMap) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:412) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:328) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:242) > at > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:617) > at mypackage.MyMain.main(MyMain.groovy:20)Exception in thread "main" > org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast > object > '{help=groovy.cli.picocli.CliBuilder$_extractAttributesFromMethod_closure12@3bb9a3ff}' > with class 'java.util.LinkedHashMap' to class 'mypackage.IHello' due to: > groovy.lang.GroovyRuntimeException: Could not find matching constructor for: > mypackage.IHello(LinkedHashMap) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:412) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:328) > at > org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:242) > at > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:617) > at mypackage.MyMain.main(DcsServizi2Sdi.groovy:20){noformat} > The exception occurs at this line: > {{IHello hello = cli.parseFromSpec(IHello, argz)}} > The exception goes away (and all works fine) if I replace it with: > {{def hello = cli.parseFromSpec(IHello, argz)}} > I tried to downgrade Groovy down to version 2.5.0 and I always get the > exception. So this really puzzles me, since the mentioned tutorial is quite > simple and straight to follow... -- This message was sent by Atlassian JIRA (v7.6.3#76005)