Java自定义注解/装饰器 @Testing

3
我想做类似这样的操作:
@Testing private void methodThatGivesWarningIfUserTriesToUseThis() {
}
其中,@Testing 是 Java 中的自定义注解。我希望这个 @Testing 注解的行为几乎与 @Deprecated 注解完全相同 - 如果我或其他人不小心在代码的其他部分中使用它,IDE 将会给出警告(方法名称也将有一个字体划掉)。因此,例如:
如何实现此功能?
**注意:我不想使用 @Deprecated,因为该方法并未被弃用,我只想将其用于测试目的。
**此标记也应在编译时而不是运行时进行检查。
3个回答

2
问题在于注释,正如它们的名字所示,只是用来注释的 :) 创建这样的注释非常容易,您需要执行以下操作:
public @interface Testing

为了让它在编译时被你的IDE使用,你需要编写一个插件。
这里有一个我在另一个SO问题中找到的好的起点,可以帮助你开始插件开发。

2
您可以考虑编写一个 自定义 Lint 规则 来解决这个问题。当检测到您的 @Testing 注解时,IDE 将显示一个 Lint 警告(例如,在 Eclipse+ADT 中会出现黄色下划线)。
在 Android 工具文档 这里 中可以找到有关使用 Lint 扫描 Java 源文件以查找特定问题的详细指南。

2
听起来你正在描述类似于 @VisibleForTesting 的东西,它是 Guava libraries 的一部分(以前称为“Google Collections”)。如果你创建了自己的一个,你可能希望它是 @Documented@Retention(SOURCE)
我不知道有什么钩子或功能会导致非@Deprecated成员触发警告或IDE标记,就好像它们是@Deprecated一样。因为 Mirror API 和 Reflection API 不跟踪单个表达式和语句(如此SO答案中所述),你可能没有太多运气在没有完整Java解析器的情况下自己检测到它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接