More precise annotation targets

arjan tijms arjan.tijms at gmail.com
Thu Oct 11 13:18:54 UTC 2018


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