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

时间:2013-09-23 21:43:16

标签: java android annotations decorator compile-time

我想做这样的事情:

@Testing

private void methodThatGivesWarningIfUserTriesToUseThis (){

}

其中@Testing是Java中的自定义注释/装饰器。我希望这个@Testing注释的行为与@Deprecated注释完全相同 - 如果我或其他人不小心尝试在代码的其他部分使用它,IDE会发出警告(并且方法名称在字体上也有一个删除线)。所以前任

我该怎么做?

**注意:我不想使用@Deprecated,因为该方法不被弃用,我只想将其用于测试目的

**此标记也应在编译时检查,而不是runTime。

3 个答案:

答案 0 :(得分:2)

问题在于注释正如其名称所述,仅用于注释:) 创建这样的注释非常简单,你需要做这样的事情:

public @interface Testing

为了在编译时IDE使用它,你必须编写一个插件。

这是我在另一个SO问题中找到的good start,从插件开发开始。

答案 1 :(得分:2)

听起来你正在描述像@VisibleForTesting这样的内容,它是Guava libraries(以前称为“Google Collections”)的一部分。如果你创建了自己的一个,你可能希望它是@Documented and @Retention(SOURCE)

我不知道任何会导致非@Deprecated成员触发警告或IDE标记的钩子或功能,就好像它们是@Deprecated一样。由于Mirror API和Reflection API不跟踪单个表达式和语句(如文档in this SO answer所述),因此如果没有完整的Java解析器,您可能没有太多运气检测它。

答案 2 :(得分:2)

您可以考虑编写custom Lint rule来解决此问题。当检测到@Testing注释时,IDE将显示Lint警告(例如,在Eclipse + ADT的情况下为黄色下划线)。

有关Lint特定问题的扫描Java源文件的详细指南,请参阅Android工具文档here