[ https://issues.apache.org/jira/browse/GROOVY-9510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17751153#comment-17751153 ]
Eric Milles edited comment on GROOVY-9510 at 8/4/23 4:09 PM: ------------------------------------------------------------- So one option would be to support {{@ClosureParams}} and {{@DelegatesTo}} as type annotations so you could write it this way. This would require STC changes to pick up on. {code:java} ... public @interface Requires { Class<? extends @DelegatesTo(PreconditionContext.class) Closure> value(); } {code} Update: This might match a bit too much. I think a closure inside the test method will get the same treatment. I haven't worked that out. {code:groovy} import spock.lang.Requires import org.codehaus.groovy.ast.ClassHelper import org.spockframework.runtime.extension.builtin.PreconditionContext contribute((enclosingClass(annotatedBy(Requires)) | enclosingMethod(annotatedBy(Requires))) & inClosure() & isThisType()) { delegatesTo type: ClassHelper.make(PreconditionContext) } {code} !image-2023-08-04-11-04-29-834.png! was (Author: emilles): So one option would be to support {{@ClosureParams}} and {{@DelegatesTo}} as type annotations so you could write it this way. This would require STC changes to pick up on. {code:java} ... public @interface Requires { Class<? extends @DelegatesTo(PreconditionContext.class) Closure> value(); } {code} <working on DSLD example -- will insert when I've got something> > DelegatesTo and similar for annotation member methods > ----------------------------------------------------- > > Key: GROOVY-9510 > URL: https://issues.apache.org/jira/browse/GROOVY-9510 > Project: Groovy > Issue Type: Bug > Reporter: Björn Kautler > Priority: Major > Labels: annotations > Attachments: image-2023-08-04-11-04-29-834.png > > > If you have an annotation with a closure field like for example this in Spock: > {code:java} > @Retention(RetentionPolicy.RUNTIME) > @Target({ElementType.TYPE, ElementType.METHOD}) > @ExtensionAnnotation(RequiresExtension.class) > public @interface Requires { > Class<? extends Closure> value(); > }{code} > you can use it like > {code:java} > @Requires({ os.windows }){code} > But I see no way to add IDE-hints for that closure like > {{@DelegatesTo(PreconditionContext.class)}} as it is restriced to parameters. > It would be nice if you could also annotate annotation member methods (and if > IDEs would then support that too). -- This message was sent by Atlassian Jira (v8.20.10#820010)