【问题标题】:How can I write a super annotation for checkstyle exemptions?如何为 checkstyle 豁免编写超级注释?
【发布时间】:2013-01-16 02:14:19
【问题描述】:

我是注释新手。我想做的是写一个包含其他人的东西。我以前从未需要过,而且我对他们很陌生,所以这部分是为了学习经验。

我有一些第三方代码的 checkstyle 豁免,没有人愿意为我将豁免添加到 Sonar 服务器。我想要做的是编写一个超级注释,让我可以选择性地使用我的检查样式排除,而不是应用对我来说似乎很危险的@SupressWarnings("all")。提议的注释基本上只是应用@SupressWarnings(“将检查样式键放在这里”)组。第一个版本将仅排除所有检查样式。下一个版本将添加按类别、子类别等执行此操作的功能,以更接近叶排除。可以使用我能得到的任何建议。我正在阅读我现在可以得到的关于注释的内容,但也没有太多使用反射。

【问题讨论】:

    标签: java annotations checkstyle


    【解决方案1】:

    SuppressWarnings 注释是非常特定于编译器/IDE 的。您不能在其中创建自己的注释条目,从而神奇地修改 Java 编译器 - 除非您愿意进行项目龙目岛风格的代码生成以将 @SuppressWarnings("your-specific-syntax") 更改为各种其他 @SuppressWarnings。为此,您必须与 AST 进行交互。查看 Lombok 源代码并阅读 Annotation Processing Tool (APT)。

    【讨论】:

    • 我的意图只是写一个简单而安全的注释来关闭声纳关于没有人关心的生成代码,无论如何我无法更改。问题是,时不时有人从拙劣的统计数据中得到错误的想法并吓坏了。不,他们不会为我更改服务器配置。
    • 最接近正确答案。正确的答案可能是“找一份更好的工作”。
    【解决方案2】:

    Checkstyle 已经内置了它。
    您必须激活并设置触发 checkstyle 的特定排除字符串 忽略接下来 N 行的指定警告。

    使用自定义的checkstyle配置checks.xml,并添加:

    <module name="SuppressWithNearbyCommentFilter">
        <property name="commentFormat" value="CS\:IGNORE ([\w\|]+) (\d+)"/>
        <property name="checkFormat" value="$1"/>
        <property name="influenceFormat" value="$2"/>
      </module>
    

    现在您可以在行或方法上方使用注释忽略特定检查:

    示例:

    // CS:IGNORE Catch|MethodLength 10
    public void longMethod() {
      // Method that would cause checkstlye to detetced a length and Catch Exception warning
    }
    

    Catch|MethodLength : 忽略以下警告:Catch 和 MethodLength

    10 表示:排除规则对接下来的 10 行有效。

    【讨论】:

    • 我不明白,服务器访问?您必须更改或询问构建管理器来设置单独的 checkstyle 配置,这些配置可以从标准 checkstyle 配置中复制。
    • 他们忽略的请求。我不得不假设意志会继续忽略它们。
    猜你喜欢
    • 2019-01-16
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2021-01-10
    • 2023-03-28
    相关资源
    最近更新 更多