【问题标题】:Can I disable CheckStyle complaints for deprecated methods and classes?我可以禁用对已弃用的方法和类的 CheckStyle 投诉吗?
【发布时间】:2009-10-10 00:34:50
【问题描述】:
我正在维护一个已弃用某些公共静态字段的 API。
CheckStyle 大声抱怨这些,但我宁愿让它完全忽略它们,因为我已经通过将字段标记为已弃用来解决问题。
具体来说,该库具有用于枚举的常量(公共静态最终),但它们没有被标记为最终的。 CheckStyle 会抱怨它们,但我不能在不违反合同的情况下将它们更改为 final。
我的计划是将它们标记为已弃用,然后再将其删除。但是将它们标记为已弃用并不会将它们从 CheckStyle 报告中删除。
【问题讨论】:
标签:
deprecated
checkstyle
【解决方案1】:
我有两个选择:
-
手动抑制每一行的警告
这种方法不太灵活,因为每次换行时都必须保持抑制配置。但是您可以单独处理每个事件。
<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 模块,因此您不能使用它。