Kevin, that’s strange, there are working unit tests that do exactly the same... For example:
https://github.com/apache/groovy/blob/GROOVY_2_5_X/subprojects/groovy-cli-picocli/src/test/groovy/groovy/cli/picocli/CliBuilderTest.groovy#L794 On Wed, Sep 12, 2018 at 12:52 Kevin Perkins <[email protected]> wrote: > Hello, > > I think I've found a bug with groovy.cli.picocli.CliBuilder as of Groovy > 2.5.2. I didn't find this particular issue in JIRA. I figured I'd ask here. > The parseFromSpec method of groovy.cli.picocli.CliBuilder seems to always > return a LinkedHashMap instead of the expected type (the class given as the > first argument). The source my IDE shows me for this method has "cliOptions > as T" as the last line in the method. I think that the problem is T is > erased when the method is compiled and so the "as T" does (effectively) > nothing. I think the correct code would be > "cliOptions.asType(optionsClass)". > > Environment information: > /* -------------- groovy --version ------------------------------------ */ > Groovy Version: 2.5.2 JVM: 1.8.0_172 Vendor: Oracle Corporation OS: > Windows 7 > > /* --------------- IDE version info ------------------------------------- > */ > IntelliJ IDEA 2018.2.3 (Ultimate Edition) > Build #IU-182.4323.46, built on September 3, 2018 > JRE: 1.8.0_152-release-1248-b8 amd64 > JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o > Windows 7 6.1 > > The following code demonstrates the issue: > /* ------------------------ Begin Example Code ------------------------ */ > import groovy.cli.Option > import groovy.cli.picocli.CliBuilder > > class CliBuilderBug { > interface CliArguments { > @Option(longName='dummy') int dummy() > } > > static void main(String[] args) { > CliBuilder builder = new CliBuilder() > > def ok = builder.parseFromSpec(CliArguments, args) as CliArguments > assert ok instanceof CliArguments // ok > println "Using 'as' works." > > def notOk = builder.parseFromSpec(CliArguments, args) > assert notOk instanceof LinkedHashMap // this assertion is true > assert notOk instanceof CliArguments // fails > println 'We never get here.' > } > } > /* ------------------------ End Example Code ------------------------ */ > > I hope this is helpful, and thank you for your time. > - Kevin Perkins > NOTICE TO RECIPIENT: If you are not the intended recipient of this > e-mail, you are prohibited from sharing, copying, or otherwise using or > disclosing its contents. If you have received this e-mail in error, please > notify the sender immediately by reply e-mail and permanently delete this > e-mail and any attachments without reading, forwarding or saving them. > Thank you. > >
