blob: 50f7cc719536150bd66ca2650af20a783174431e [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001<?xml version="1.0"?>
2<ruleset name="WPILibRuleset"
3 xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
6
7 <description>PMD Ruleset for WPILib</description>
8
9 <exclude-pattern>.*/*JNI.*</exclude-pattern>
10 <exclude-pattern>.*/*IntegrationTests.*</exclude-pattern>
11
12 <rule ref="category/java/bestpractices.xml">
13 <exclude name="AccessorClassGeneration" />
14 <exclude name="AccessorMethodGeneration" />
15 <exclude name="AvoidPrintStackTrace" />
16 <exclude name="AvoidReassigningParameters" />
17 <exclude name="JUnitAssertionsShouldIncludeMessage" />
18 <exclude name="JUnitTestContainsTooManyAsserts" />
19 <exclude name="JUnit4TestShouldUseAfterAnnotation" />
20 <exclude name="JUnit4TestShouldUseBeforeAnnotation" />
21 <exclude name="JUnit4TestShouldUseTestAnnotation" />
22 <exclude name="ReplaceHashtableWithMap" />
23 <exclude name="ReplaceVectorWithList" />
24 <exclude name="SwitchStmtsShouldHaveDefault" />
25 <exclude name="SystemPrintln" />
26 <exclude name="UseVarargs" />
27 </rule>
28 <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
29 <properties>
30 <property name="violationSuppressRegex"
31 value=".*'.*Arguments\(\)'.*" />
32 </properties>
33 </rule>
34
35 <rule ref="category/java/design.xml">
36 <exclude name="DataClass" />
37 <exclude name="LawOfDemeter" />
38 <exclude name="LoosePackageCoupling" />
39 <exclude name="NcssConstructorCount" />
40 <exclude name="NcssCount" />
41 <exclude name="NcssMethodCount" />
42 </rule>
43
44 <rule ref="category/java/errorprone.xml">
45 <exclude name="AssignmentToNonFinalStatic" />
46 <exclude name="AvoidDuplicateLiterals" />
47 <exclude name="AvoidLiteralsInIfCondition" />
48 <exclude name="BeanMembersShouldSerialize" />
49 <exclude name="ConstructorCallsOverridableMethod" />
50 <exclude name="DataflowAnomalyAnalysis" />
51 <exclude name="DoNotCallSystemExit" />
52 <exclude name="FinalizeDoesNotCallSuperFinalize" />
53 <exclude name="JUnitSpelling" />
54 <exclude name="MissingSerialVersionUID" />
55 <exclude name="NullAssignment" />
56 </rule>
57
58 <rule ref="category/java/multithreading.xml">
59 <exclude name="AvoidSynchronizedAtMethodLevel" />
60 <exclude name="AvoidUsingVolatile" />
61 <exclude name="DoNotUseThreads" />
62 <exclude name="UseConcurrentHashMap" />
63 </rule>
64
65 <rule ref="category/java/performance.xml">
66 <exclude name="AvoidUsingShortType" />
67 </rule>
68
69 <rule name="UnnecessaryCastRule"
70 language="java"
71 message="Avoid unnecessary casts"
72 class="net.sourceforge.pmd.lang.java.rule.migrating.UnnecessaryCastRule"
73 externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/migrating/UnnecessaryCastRule.java" />
74
75 <!-- Custom Rules -->
76 <rule name="UseRequireNonNull"
77 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
78 language="java"
79 class="net.sourceforge.pmd.lang.rule.XPathRule">
80 <description>Use Objects.requireNonNull() instead of throwing a
81 NullPointerException yourself.</description>
82 <properties>
83 <property name="xpath">
84 <value>
85 <![CDATA[
86 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
87 ]]>
88 </value>
89 </property>
90 </properties>
91 <priority>3</priority>
92 <example>
93<![CDATA[
94 public class Example {
95 public Example(Object example) {
96 if (example == null) {
97 throw new NullPointerException();
98 }
99 }
100 }
101 ]]>
102 </example>
103 </rule>
104</ruleset>