我正在维护一个已弃用某些公共静态字段的API。
CheckStyle大声抱怨这些,但我宁愿让它完全忽略它们,因为我通过将字段标记为已弃用来处理问题。
具体来说,库具有枚举常量(public static final),但它们没有标记为final。 CheckStyle会抱怨他们,但我不能在不违反合同的情况下将其改为最终版。
我的计划是将它们标记为已弃用,然后再将其删除。但是将它们标记为已弃用不会将它们从CheckStyle报告中删除。
答案 0 :(得分:8)
我有两种选择:
手动取消每行的警告
这种方法不太灵活,因为每次换线时都必须保持抑制配置。但您可以单独处理每个事件。
<suppress checks="YOURCHECK" files=".*YOURCLASS\.java" lines="YOURLINES"/>
我不知道哪个检查导致您的问题,因此您必须使用正确的名称替换YOURCHECK。 YOURCLASS命名java文件,其中包含已弃用的代码,但您可以插入.*
将其应用于每个文件。 YOURLINES是以逗号分隔的值列表,其中每个值都是整数或整数范围,用整数整数表示。
使用评论建议checkstyle忽略警告
此解决方案允许您一次停用对所有已弃用成员的检查。但你必须遵循严格的惯例。您必须在最后一个位置向这些成员(,您可能已经做过)添加@deprecated
注释,因为此过滤器具有严格的行范围。
/**
* @deprecated I don't like this anymore.
*/
public static String EXAMPLE = "example";
此解决方案需要在配置文件中进行更改。首先,您必须将FileContentsHolder
作为孩子添加到TreeWalker
。
<module name="TreeWalker">
...
<module name="FileContentsHolder"/>
...
</module>
现在您可以配置SuppressWithNearbyCommentFilter
模块中的Checker
。
<module name="Checker">
...
<module name="SuppressWithNearbyCommentFilter">
<property name="commentFormat" value=".*deprecated.*"/>
<property name="checkFormat" value=".*"/>
<property name="influenceFormat" value="2"/>
</module>
...
</module>
如果您决定只忽略特定检查,请调整checkFormat
属性。或者,如果要使用其他注释,请更改commentFormat
属性。但是,将influenceFormat
设置为正确的值非常重要。它会在评论之后的多少行中告诉checkstyle,因为忽略这些检查。
P.S。:请注意,当您使用其用户界面更改配置时,Eclipse CheckStyle插件会删除FileContentsHolder
模块,因此您不能使用它。