【发布时间】:2022-01-05 21:28:19
【问题描述】:
我认为最好从我想要实施的想法开始。我真的受到 Rust mut 指针的启发,因此同一类型可以同时是不可变和可变的。我在想是否有可能为 JVM 实现这样的东西。
看起来我只需要创建注释@Mutates 来注释改变当前类状态的方法和注释@Mutable 来注释局部变量、字段和参数。处理器的逻辑不是太难。对于由@Mutates 注释的方法的每次调用,我需要检查相应的变量/字段/arg 是否由@Mutable 注释。如果方法在字段上调用任何 @Mutates 方法或进行赋值(= 运算符),则该方法也必须由 @Mutates 注释。
主要问题我不知道从哪里开始,因为我没有注释处理方面的经验。根据我有限的理解,我不能使用注释处理器,因为它不应该分析方法代码......所以我似乎需要创建一些编译器插件(两个:用于 Java 和 Kotlin)。
有人可以给我一条建议吗 - 是否有可能做到这一点,这有多难(这样我就可以估计为此需要付出的努力和时间,并决定是否值得)
【问题讨论】:
-
注释处理器不应该改变实际的类代码,而是生成新的源代码,在你的情况下,你可以做的是生成一个可能从原始类扩展的新类并覆盖方法进行所需的检查,然后将调用委托给基方法。看看immutables.github.io 可能是个好主意,因为他们使用注释处理器来做
标签: java kotlin annotation-processing