[ https://issues.apache.org/jira/browse/GROOVY-7632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniil Ovchinnikov updated GROOVY-7632: --------------------------------------- Description: It would be really nice if groovy will include some annotation for type checking named params. For example we do not know what map is expected until we go into source. {code:title=Annotation|borderStyle=solid} @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.PARAMETER}) public @interface NamedParams { NamedParam[] value(); boolean unknowns() default false; @interface NamedParam { String value(); Class type() default Object.class; int genericTypeIndex() default -1; String target() default ""; boolean required() default false; } } {code} {code:title=Example Usage|borderStyle=solid} def foo(@NamedParams([ @NamedParam("bar"), @NamedParam(value = "baz", type = String) ]) Map map) { println map.bar println map.baz } foo(bar: [], baz: "") {code} In {{@CompileStatic}} case it could be used to fail the compilation if user tries to get some unknown value from map, and also to fail is user does not pass some required argument. Also it could be used to annotate map-constructors in compile-time. And the last one: it will be very useful for IDEs. was: It would be really nice if groovy will include some annotation for type checking named params. For example we do not know what map is expected until we go into source. Annotation could look like this: {code:title=Annotation|borderStyle=solid} @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.PARAMETER}) public @interface NamedParams { NamedParam[] value(); boolean unknowns() default false; @interface NamedParam { String value(); Class type() default Object.class; int genericTypeIndex() default -1; String target() default ""; boolean required() default false; } } {code} {code:title=Example Usage|borderStyle=solid} def foo(@NamedParams([ @NamedParam("bar"), @NamedParam(value = "baz", type = String) ]) Map map) { println map.bar println map.baz } foo(bar: [], baz: "") {code} In {{@CompileStatic}} case it could be used to fail the compilation if user tries to get some unknown value from map, and also to fail is user does not pass some required argument. Also it could be used to annotate map-constructors in compile-time. And the last one: it will be very useful for IDEs. > Groovy named parameters static check > ------------------------------------ > > Key: GROOVY-7632 > URL: https://issues.apache.org/jira/browse/GROOVY-7632 > Project: Groovy > Issue Type: Improvement > Components: Static Type Checker > Reporter: Daniil Ovchinnikov > Assignee: Cédric Champeau > > It would be really nice if groovy will include some annotation for type > checking named params. > For example we do not know what map is expected until we go into source. > {code:title=Annotation|borderStyle=solid} > @Retention(RetentionPolicy.RUNTIME) > @Target({ElementType.PARAMETER}) > public @interface NamedParams { > NamedParam[] value(); > boolean unknowns() default false; > @interface NamedParam { > String value(); > Class type() default Object.class; > int genericTypeIndex() default -1; > String target() default ""; > boolean required() default false; > } > } > {code} > {code:title=Example Usage|borderStyle=solid} > def foo(@NamedParams([ > @NamedParam("bar"), > @NamedParam(value = "baz", type = String) > ]) Map map) { > println map.bar > println map.baz > } > foo(bar: [], baz: "") > {code} > In {{@CompileStatic}} case it could be used to fail the compilation if user > tries to get some unknown value from map, and also to fail is user does not > pass some required argument. > Also it could be used to annotate map-constructors in compile-time. > And the last one: it will be very useful for IDEs. -- This message was sent by Atlassian JIRA (v6.3.4#6332)