我想做这样的事情:
@Testing
private void methodThatGivesWarningIfUserTriesToUseThis (){
}
其中@Testing
是Java中的自定义注释/装饰器。我希望这个@Testing
注释的行为与@Deprecated
注释完全相同 - 如果我或其他人不小心尝试在代码的其他部分使用它,IDE会发出警告(并且方法名称在字体上也有一个删除线)。所以前任
我该怎么做?
**注意:我不想使用@Deprecated
,因为该方法不被弃用,我只想将其用于测试目的
**此标记也应在编译时检查,而不是runTime。
答案 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。