java注解处理:如何在kotlin代码中更改注解目标?

wpx232ag  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(287)

通常,当我在kotlin代码中使用java库中的注解时,我必须指定target以指定编译代码中必须注解的元素:

data class User(
    val id: String,

    @get:Email
    val email: String
)

而不是指定 @get:Email ,我希望能够简单地使用 @Email 尤其是在很多地方。
问:有没有一种方法可以提示kotlin编译器在所有地方使用不同的目标,这样如果我使用 @Email 它会像以前一样处理它 @get:Email ? 或者有没有其他方法可以省略指定目标?如何实现?是否可以在编译阶段通过注解处理完成(就像lombok那样)?
我会很感激任何想法,即使他们不直接回答我的问题。

p3rjfoxz

p3rjfoxz1#

你不能覆盖它。也许可以创建一个注解 @Email 注解,并在尝试调用target时提供属性getter。
指定目标由注解目标指定。当注解的目标被指定为jvm use targets时,您必须使用 @get: 指定注解以属性的getter为目标。
为了简单的使用 @Email 您必须为注解使用kotlin目标类型 PROPERTY . 注意, PROPERTY target不能与java一起工作。

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Email
58wvjzkj

58wvjzkj2#

它应该可以与kotlin编译器插件api。这是一个复杂的方法,tho。
要实现这一点,您需要添加一个带有访问者处理的classbuilder拦截器 @Email 注解并指定正确的目标。
如果访问者足够或者您还需要修改某个编译器阶段的源代码,请检查treevisitor。

相关问题