是否有一个Checkstyle规则来强制类中的每个字段都具有注释?

问题描述

我们希望简化合规性,对于FedRAMP,我们希望在数据库对象的所有字段中都具有类似的内容

@FedRamp(confidentiality=LOW,integrity=MODERATE,availability=HIGH)

如果人们添加数据而忘记将它们添加到* Dbo.java类的'any'字段中,我们希望checkstyle破坏构建。然后,我们可以在每个数据项(因此是整个系统)上生成FedRAMP合规性。我们在每个类上运行checkstyle,但只希望此规则在* Dbo.java结尾的类上运行。在我们导入一些已经存在的checkstyle规则或插件并向其中添加类名过滤器的地方,这可能吗?

谢谢, 院长

解决方法

要报告任何类的此类情况的违规行为,您可以使用 MatchXpathCheck(您需要 checkstyle 8.39+) 配置将如下所示:

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
          "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name = "Checker">

    <module name="TreeWalker">
        <module name="MatchXpath">
            <property name="id" value="fedramp_check"/>
            <property name="query" value="//CLASS_DEF/OBJBLOCK/VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[not(@text='FedRamp')]"/>
            <message key="matchxpath.match"
                     value="Field should have 'FedRamp' annotation."/>
        </module>
    </module>
</module>

这将报告如下违规行为:

$ cat Test.java
class Test {

 @FedRamp(confidentiality=LOW,integrity=MODERATE,availability=HIGH)
 private int withAnnotation = 11; // no violation

  @Fed(confidentiality=LOW,availability=HIGH)
 private int without = 11; // violation

  @NotNull
  int without = 11; // violation
}

$ java -jar checkstyle-8.42-all.jar -c config.xml Test.java
Starting audit...
[ERROR] C:\workdir\Test.java:6:4: Field should have FedRamp annotation. [fedramp_check]
[ERROR] C:\workdir\Test.java:9:4: Field should have FedRamp annotation. [fedramp_check]
Audit done.
Checkstyle ends with 2 errors.


您的问题的第二部分 - 仅针对特定类执行缩小 - 可以通过多种方式解决。

  1. 使用稍微不同的 xpath 来过滤类名(不是文件,因为单个文件中可以有很多类)
<property name="query"
   value="//CLASS_DEF[./IDENT[ends-with(@text,'Dbo')]]/OBJBLOCK/VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[not(@text='FedRamp')]"/>
  1. 使用 BeforeExecutionExclusionFileFilter - 它是整个配置的过滤器,只有当您有一个单独的配置来检查注释内容时才可以正常工作。
  2. 禁止对其他类文件进行此检查的违规(例如,通过 id),请参阅 doc

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...