More precise annotation targets
Brian Goetz
brian.goetz at oracle.com
Thu Oct 11 13:27:47 UTC 2018
You can accomplish this today with an annotation processor. Make your
own @TargetMethods meta-annotations, and then have an AP that enforces
that the constraints of the meta-annotations are respected. You don't
need a language change.
On 10/11/2018 9:18 AM, arjan tijms wrote:
> Hi,
>
> I wonder if the following would make sense to consider for a Java language
> enhancement:
>
> Annotations can currently be targeted
> to TYPE, FIELD, METHOD, TYPE_PARAMETER etc.
>
> For lots of cases this is fine, but in other case you need a bit more
> detail. For instance, consider an @ActionEvent annotation that targets
> METHOD, but actually can only be applied on methods with a specific
> signature such as void method(Action); and void method();
>
> You might want to have correct placement of the annotation expressed in a
> little more exact way, like e.g.
>
> @Target(METHOD)
> @TargetMethods( {ActionInterface.class, ActionInterface2.class})
> @Retention(RUNTIME)
> public @interface ActionEvent {}
>
>
> With ActionInterface.class and ActionInterface2.class both functional
> classes.
>
> Alternatively:
>
> @Target(METHOD)
> @TargetMethods( {
> @MethodSignature(
> return=Void.class, arguments=Action.class),
> @MethodSignature(
> return=Void.class)}
> }
> @Retention(RUNTIME)
> public @interface ActionEvent {}
>
> The syntax used is just illustrative of the idea.
>
> Thoughts?
>
> Kind regards,
> Arjan
More information about the discuss
mailing list