当前位置: 首页 > 知识库问答 >
问题:

注释处理:如何更改Kotlin代码中的注释目标?

喻高寒
2023-03-14

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

data class User(
    val id: String,

    @get:Email
    val email: String
)

而不是指定@get: Email,我希望能够简单地使用@Email,特别是如果它发生在许多地方。

问题:有没有一种方法可以提示Kotlin编译器在所有位置使用不同的目标,这样如果我使用@Email,它就会像处理@get:Email一样处理它?或者有没有其他方法可以省略指定目标?如何实现这一目标?是否可以在编译阶段通过注释处理完成(像Lombok那样)?

即使他们没有直接回答我的问题,我也会很感激任何想法。

共有2个答案

柯升
2023-03-14

使用Kotlin编译器插件API应该是可能的。这是一个复杂的方式,tho。

要实现这一点,您需要添加一个ClassBuilder拦截器,该拦截器带有一个访问者处理@Email注释并指定正确的目标。

如果不深入了解visitor是否足够,或者您还需要在其中一个编译器阶段修改源代码,请检查TreeVisitor。

方献
2023-03-14

你不能覆盖它。也许创建注释,将目标@Email注释和提供属性getter时,它试图调用目标。

指定目标由注释目标指定。当注释的目标指定为jvm use targets时,必须使用@get:指定注释以属性的getter为目标。

为了简单地使用@Email,您必须为注释使用kotlin目标类型,可能是属性。请注意,PROPERTYtarget不适用于Java。

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Email
 类似资料:
  • 我通过了https://code.visualstudio.com/docs/getstarted/theme-color-reference但似乎找不到更改评论颜色的设置。 我目前使用的是Atom One深色主题,只是想把颜色调浅一点,这样我可以看得更清楚。

  • 在观看了一位著名的python程序员的Sublime3 screencast之后,我发现用花哨的字体显示代码注释是一个很好的想法,它让注释更容易区分,并使注释阅读更愉快。一个例子如下: 在这个演示中,代码注释以浅色手写字体显示,使其更容易与真实代码区分,同时保持注释阅读的乐趣。 我浏览了https://code.visualstudio.com/docs/getstarted/,但似乎找不到更改代

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 众所周知,我们可以像ProjectLombook的工作人员一样,使用自定义注释和Java注释处理器自动生成代码。但是我们可以从编译的源代码中删除带注释的代码吗? 我试着在网上搜索它,但只出现了“生成代码”主题和“如何生成带有一个注释的服务器”教程。当我在寻找从prod应用程序“编译”调试消息的方法时,我想到了这一点。我可以理解,拥有调试/测试和生产代码不是一个好的实践,但有时需要保持简单。我认为这

  • 我的处理器中有一个简单的注释,如下所示: 这适用于java文件,但一旦我将文件转换为kotlin,注释的导入就不再有效。为什么? 我需要改变什么才能让他的注释也在Kotlin中工作?从文档中,我可以看到kotlin与java注释100%兼容,所以我有点困惑这里有什么问题...如果处理器不工作,需要调整以与kotlin一起工作,我会理解,但我不知道为什么导入本身不工作... 我说的图书馆在这里:ht

  • 我有一个批处理文件,它运行几个python脚本来修改表。 > 我还想添加注释,特别提醒他们在运行批处理文件之前需要在批处理文件中更新的变量。我知道我可以使用。但这看起来更像是为了在用户运行之后更新进度。 是否有更恰当地添加注释的语法?