我们使用AvoidStaticFields自定义PMD规则:
<rule
name="AvoidStaticFields"
language="java"
externalInfoUrl=""
message="Static fields that are not literal constants should be avoided."
class="net.sourceforge.pmd.lang.rule.XPathRule">
<description>
Detects static fields that are not literal constants. Static fields are usually used to implement singleton pattern or caching, which is not a good practice. There are better ways to implement singleton pattern and caching.
</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
//FieldDeclaration[@Static='true']
[count(descendant::Literal)=0]
[not(Type/ReferenceType/ClassOrInterfaceType[@Image='String'])]
]]>
</value>
</property>
</properties>
<example>
<![CDATA[
public class BadClass {
final static int INT_CONSTANT = 0; // OK, constant
final static String STRING_CONSTANT = "bl_id"; // OK, constant
final static double DOUBLE_CONSTANT = 0.0; // OK, constant
final static Integer INTEGER_CONSTANT = Integer.valueOf(0); // OK, constant
final static Map MAP_CACHED = new HashMap(); // Bad, caching
final static List LIST_CACHED = new ArrayList(); // Bad, caching
private static final String[][] FIELDS_TO_PROPERTIES = { { STRING_CONSTANT, STRING_CONSTANT } }; // OK, array of constants
}
]]>
</example>
</rule>
我们正在迁移到SonarQube。有没有人对SonarQube有类似的规则?