【问题标题】: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】:

我有两个选择:

  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 在注释后的多少行内忽略这些检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2021-04-14
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多