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

All*_*nde 5 checkstyle deprecated

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

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

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

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

Chr*_*fer 8

我有两种选择:

  1. 手动抑制每一行的警告

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

    <suppress checks="YOURCHECK" files=".*YOURCLASS\.java" lines="YOURLINES"/>
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 使用注释建议checkstyle忽略警告

    此解决方案允许您一次停用对所有已弃用成员的检查.但你必须遵循严格的惯例.您必须@deprecated在最后一个位置向这些成员添加注释(您可能已经执行的操作),因为此过滤器具有严格的行范围.

    /**
    * @deprecated I don't like this anymore.
    */
    public static String EXAMPLE = "example";
    
    Run Code Online (Sandbox Code Playgroud)

    此解决方案需要在配置文件中进行更改.首先,您必须添加FileContentsHolder为孩子TreeWalker.

    <module name="TreeWalker">
        ...
        <module name="FileContentsHolder"/>
        ...
    </module>
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以配置SuppressWithNearbyCommentFilter哪个是Checker模块的一部分.

    <module name="Checker">
        ...
        <module name="SuppressWithNearbyCommentFilter">
            <property name="commentFormat" value=".*deprecated.*"/>
            <property name="checkFormat" value=".*"/>
            <property name="influenceFormat" value="2"/>
        </module>
        ...
    </module>
    
    Run Code Online (Sandbox Code Playgroud)

    如果您决定仅忽略特定检查,请调整该checkFormat属性.或者,如果要使用其他注释,请更改commentFormat属性.但是,设置influenceFormat正确的值非常重要.它告诉checkstyle在评论之后的多少行中忽略这些检查.

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

  • 这很棒.完善! (2认同)