![](/img/trans.png)
[英]How to append a method to existing class using annotation processing in java / kotlin?
[英]Annotation Processing: how to change annotation target in Kotlin code?
很多时候,当我在 Kotlin 代码中使用 Java 库中的注释时,我必须指定目标才能指定编译代码中必须注释的元素:
data class User(
val id: String,
@get:Email
val email: String
)
而不是指定@get:Email
,我希望能够简单地使用@Email
,特别是如果它出现在很多地方。
问题:有没有办法提示 Kotlin 编译器在所有地方使用不同的目标,这样如果我使用@Email
它会像处理@get:Email
一样处理它? 或者有没有其他方法可以省略指定目标? 如何实现? 是否可以通过注释处理在编译阶段完成(就像Lombok一样)?
即使他们不直接回答我的问题,我也会很感激任何想法。
Kotlin 编译器插件 API 应该是可能的。 这是一个复杂的方式,寿。
要实现这一点,您需要添加一个 ClassBuilder 拦截器,其中的访问者处理@Email
注释并指定正确的目标。
如果访问者就足够了,或者您还需要在编译器阶段之一上修改源代码,就不能说不深入,请检查 TreeVisitor。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.