我可以针对已弃用的方法和类禁用CheckStyle投诉吗?

时间:2009-10-10 00:34:51

标签: deprecated checkstyle

我正在维护一个已弃用某些公共静态字段的API。

CheckStyle大声抱怨这些,但我宁愿让它完全忽略它们,因为我通过将字段标记为已弃用来处理问题。

具体来说,库具有枚举常量(public static final),但它们没有标记为final。 CheckStyle会抱怨他们,但我不能在不违反合同的情况下将其改为最终版。

我的计划是将它们标记为已弃用,然后再将其删除。但是将它们标记为已弃用不会将它们从CheckStyle报告中删除。

1 个答案:

答案 0 :(得分:8)

我有两种选择:

  1. 手动取消每行的警告

    这种方法不太灵活,因为每次换线时都必须保持抑制配置。但您可以单独处理每个事件。

    <suppress checks="YOURCHECK" files=".*YOURCLASS\.java" lines="YOURLINES"/>
    

    我不知道哪个检查导致您的问题,因此您必须使用正确的名称替换YOURCHECK。 YOURCLASS命名java文件,其中包含已弃用的代码,但您可以插入.*将其应用于每个文件。 YOURLINES是以逗号分隔的值列表,其中每个值都是整数或整数范围,用整数整数表示。

  2. 使用评论建议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,因为忽略这些检查。

  3. P.S。:请注意,当您使用其用户界面更改配置时,Eclipse CheckStyle插件会删除FileContentsHolder模块,因此您不能使用它。