blob: 57ff225f4145d412eaa69bbccace399e45b01045 [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -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" />
Austin Schuh1e69f942020-11-14 15:06:14 -080042 <exclude name="TooManyMethods" />
Brian Silverman8fce7482020-01-05 13:18:21 -080043 </rule>
44
45 <rule ref="category/java/errorprone.xml">
46 <exclude name="AssignmentToNonFinalStatic" />
47 <exclude name="AvoidDuplicateLiterals" />
48 <exclude name="AvoidLiteralsInIfCondition" />
49 <exclude name="BeanMembersShouldSerialize" />
50 <exclude name="ConstructorCallsOverridableMethod" />
51 <exclude name="DataflowAnomalyAnalysis" />
52 <exclude name="DoNotCallSystemExit" />
53 <exclude name="FinalizeDoesNotCallSuperFinalize" />
54 <exclude name="JUnitSpelling" />
55 <exclude name="MissingSerialVersionUID" />
56 <exclude name="NullAssignment" />
57 </rule>
58
59 <rule ref="category/java/multithreading.xml">
60 <exclude name="AvoidSynchronizedAtMethodLevel" />
61 <exclude name="AvoidUsingVolatile" />
62 <exclude name="DoNotUseThreads" />
63 <exclude name="UseConcurrentHashMap" />
64 </rule>
65
66 <rule ref="category/java/performance.xml">
67 <exclude name="AvoidUsingShortType" />
68 </rule>
69
70 <rule name="UnnecessaryCastRule"
71 language="java"
72 message="Avoid unnecessary casts"
73 class="net.sourceforge.pmd.lang.java.rule.migrating.UnnecessaryCastRule"
74 externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/migrating/UnnecessaryCastRule.java" />
75
76 <!-- Custom Rules -->
77 <rule name="UseRequireNonNull"
78 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
79 language="java"
80 class="net.sourceforge.pmd.lang.rule.XPathRule">
81 <description>Use Objects.requireNonNull() instead of throwing a
82 NullPointerException yourself.</description>
83 <properties>
84 <property name="xpath">
85 <value>
86 <![CDATA[
87 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
88 ]]>
89 </value>
90 </property>
91 </properties>
92 <priority>3</priority>
93 <example>
94<![CDATA[
95 public class Example {
96 public Example(Object example) {
97 if (example == null) {
98 throw new NullPointerException();
99 }
100 }
101 }
102 ]]>
103 </example>
104 </rule>
105</ruleset>