是否有强制类中每个字段都有注释的检查样式规则



我们希望简化合规性,对于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, integrity=MODERATE, 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:workdirTest.java:6:4: Field should have FedRamp annotation. [fedramp_check]
[ERROR] C:workdirTest.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(的冲突,请参见文档

最新更新