Hi all, I have a question about passing closures to annotations in Groovy. To illustrate, consider the @Option annotation in the picocli library. Relevant attributes are `completionCandidates` and `converter`, defined in Java as follows:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) public @interface Option { Class<? extends ITypeConverter<?>>[] converter() default {}; Class<? extends Iterable<String>> completionCandidates() default NoCompletionCandidates.class; ... } I am working on a change to picocli <https://github.com/remkop/picocli/issues/1258> that would allow users to specify closures for these and other attributes. User code could look like this: @Option(names = '-s', completionCandidates = {["A", "B", "C"]}) @Field String s @Option(names = '-a', converter = [{ str -> MessageDigest.getInstance(str) }] ) @Field MessageDigest algorithm I think this would be a nice addition and would make picocli more "groovy". I have a prototype implementation, but it appears that only the first example ( completionCandidates = {["A", "B", "C"]} ) works as expected. When stepping through my prototype test in a debugger, it looks like the second example (the converter attribute) receives a zero-length array of classes when invoked from Groovy. I tried with Groovy 2.4.10 and 3.0.6. Is this a known limitation of Groovy? Is there a way to work around this? I can provide an example project to reproduce this if that is helpful. Kind regards, Remko