Java 确保带有特定注释的字段为';私人';
代码中最常见的错误是编写Java 确保带有特定注释的字段为';私人';,java,intellij-idea,static-analysis,checkstyle,pmd,Java,Intellij Idea,Static Analysis,Checkstyle,Pmd,代码中最常见的错误是编写 @Mock Object object; @InjectMocks Subject subject; 而不是 @Mock private Object object; @InjectMocks private Subject subject; 这可以防止PMD/FindBugs/IntelliJ在字段未使用时发出警告,并且我们的代码审查中充斥着“将此字段设置为私有”注释 当带有特定注释的字段没有预期的可见性时,任何工具中是否有任何静态分析规则来发出警告 我找到了Ch
@Mock Object object;
@InjectMocks Subject subject;
而不是
@Mock private Object object;
@InjectMocks private Subject subject;
这可以防止PMD/FindBugs/IntelliJ在字段未使用时发出警告,并且我们的代码审查中充斥着“将此字段设置为私有”注释
当带有特定注释的字段没有预期的可见性时,任何工具中是否有任何静态分析规则来发出警告
我找到了Checkstyle,但它标记了所有非私有字段,而不仅仅是带有特定注释的字段。您可以在IntelliJ IDEA中使用结构化搜索检查。例如,使用如下模式:
@Mock @Modifier("packageLocal") $FieldType$ $FieldName$ = $Init$;
字段类型:最小值:1,最大值:1字段名:最小值:1,最大值:1
Init:min:0,max:1您可以使用PMD的规则设计器创建新的XPath规则,该规则可以嵌入到PMD规则集xml文件中。我还没有将PMD与IntellijIDEA或Jenkins一起使用,但我确信这些插件是存在的 以下是我制定的规则(未在规则设计器之外测试):
3.
谢谢-您是否认为有可能在Jenkins上实现自动化,并在这种模式匹配的情况下通过有意义的消息使构建失败?IntelliJ IDEA有一个inspect.sh脚本,它是bin目录,可用于类似的操作。你可能还需要Jenkins的插件。很抱歉,我帮不上什么忙,我自己从来没有用过詹金斯。这里有一个关于写作规则的教程:上面的链接似乎不见了,添加了一个存档链接:我不会把它作为一个新的答案发布,因为我没有访问它的权限-这是一个商业工具。Fortify似乎同时支持和查询。
<rule name="NonPrivateMockAnnotation"
message="Mock anotation should be private"
class="net.sourceforge.pmd.lang.rule.XPathRule">
<description>
</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//ClassOrInterfaceBodyDeclaration[
Annotation/MarkerAnnotation/Name[
@Image = 'InjectMocks' or
@Image = 'Mock'
] and
FieldDeclaration/@Private = 'false'
]
]]>
</value>
</property>
</properties>
<priority>3</priority>
<example>
<![CDATA[
class Example {
@Mock Object object;
@InjectMocks Subject subject;
}
]]>
</example>
</rule>