blob: bdfb9a785c4d4b7a07936655facdb77f1bb7beef [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001<?xml version="1.0"?>
2<ruleset name="WPILibRuleset"
Austin Schuh812d0d12021-11-04 20:16:48 -07003 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">
Brian Silverman8fce7482020-01-05 13:18:21 -08006
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" />
Austin Schuh812d0d12021-11-04 20:16:48 -070017 <exclude name="AvoidUsingHardCodedIP" />
18 <exclude name="ConstantsInInterface" />
Brian Silverman8fce7482020-01-05 13:18:21 -080019 <exclude name="JUnitAssertionsShouldIncludeMessage" />
20 <exclude name="JUnitTestContainsTooManyAsserts" />
21 <exclude name="JUnit4TestShouldUseAfterAnnotation" />
22 <exclude name="JUnit4TestShouldUseBeforeAnnotation" />
23 <exclude name="JUnit4TestShouldUseTestAnnotation" />
Austin Schuh812d0d12021-11-04 20:16:48 -070024 <exclude name="LooseCoupling" />
Brian Silverman8fce7482020-01-05 13:18:21 -080025 <exclude name="ReplaceHashtableWithMap" />
26 <exclude name="ReplaceVectorWithList" />
27 <exclude name="SwitchStmtsShouldHaveDefault" />
28 <exclude name="SystemPrintln" />
29 <exclude name="UseVarargs" />
30 </rule>
31 <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
32 <properties>
33 <property name="violationSuppressRegex"
Austin Schuh812d0d12021-11-04 20:16:48 -070034 value=".*'.*Arguments\(\)'.*" />
Brian Silverman8fce7482020-01-05 13:18:21 -080035 </properties>
36 </rule>
37
38 <rule ref="category/java/design.xml">
Austin Schuh812d0d12021-11-04 20:16:48 -070039 <exclude name="AvoidThrowingRawExceptionTypes" />
40 <exclude name="CyclomaticComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080041 <exclude name="DataClass" />
Austin Schuh812d0d12021-11-04 20:16:48 -070042 <exclude name="ExcessiveClassLength" />
43 <exclude name="ExcessiveImports" />
44 <exclude name="ExcessiveMethodLength" />
45 <exclude name="ExcessiveParameterList" />
46 <exclude name="ExcessivePublicCount" />
47 <exclude name="GodClass" />
Brian Silverman8fce7482020-01-05 13:18:21 -080048 <exclude name="LawOfDemeter" />
49 <exclude name="LoosePackageCoupling" />
Austin Schuh812d0d12021-11-04 20:16:48 -070050 <exclude name="NPathComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080051 <exclude name="NcssConstructorCount" />
52 <exclude name="NcssCount" />
53 <exclude name="NcssMethodCount" />
Austin Schuh812d0d12021-11-04 20:16:48 -070054 <exclude name="TooManyFields" />
Austin Schuh1e69f942020-11-14 15:06:14 -080055 <exclude name="TooManyMethods" />
Brian Silverman8fce7482020-01-05 13:18:21 -080056 </rule>
57
58 <rule ref="category/java/errorprone.xml">
59 <exclude name="AssignmentToNonFinalStatic" />
60 <exclude name="AvoidDuplicateLiterals" />
61 <exclude name="AvoidLiteralsInIfCondition" />
62 <exclude name="BeanMembersShouldSerialize" />
63 <exclude name="ConstructorCallsOverridableMethod" />
64 <exclude name="DataflowAnomalyAnalysis" />
65 <exclude name="DoNotCallSystemExit" />
66 <exclude name="FinalizeDoesNotCallSuperFinalize" />
67 <exclude name="JUnitSpelling" />
68 <exclude name="MissingSerialVersionUID" />
69 <exclude name="NullAssignment" />
70 </rule>
71
72 <rule ref="category/java/multithreading.xml">
73 <exclude name="AvoidSynchronizedAtMethodLevel" />
74 <exclude name="AvoidUsingVolatile" />
75 <exclude name="DoNotUseThreads" />
76 <exclude name="UseConcurrentHashMap" />
77 </rule>
78
79 <rule ref="category/java/performance.xml">
80 <exclude name="AvoidUsingShortType" />
Austin Schuh812d0d12021-11-04 20:16:48 -070081 <exclude name="AvoidInstantiatingObjectsInLoops" />
Brian Silverman8fce7482020-01-05 13:18:21 -080082 </rule>
83
Austin Schuh812d0d12021-11-04 20:16:48 -070084 <rule name="UnnecessaryCastRule" language="java"
85 message="Avoid unnecessary casts"
86 class="net.sourceforge.pmd.lang.java.rule.migrating.UnnecessaryCastRule"
87 externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/migrating/UnnecessaryCastRule.java" />
Brian Silverman8fce7482020-01-05 13:18:21 -080088
89 <!-- Custom Rules -->
90 <rule name="UseRequireNonNull"
Austin Schuh812d0d12021-11-04 20:16:48 -070091 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
92 language="java" class="net.sourceforge.pmd.lang.rule.XPathRule">
Brian Silverman8fce7482020-01-05 13:18:21 -080093 <description>Use Objects.requireNonNull() instead of throwing a
Austin Schuh812d0d12021-11-04 20:16:48 -070094 NullPointerException yourself.</description>
Brian Silverman8fce7482020-01-05 13:18:21 -080095 <properties>
96 <property name="xpath">
97 <value>
98 <![CDATA[
99 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
100 ]]>
101 </value>
102 </property>
103 </properties>
104 <priority>3</priority>
105 <example>
106<![CDATA[
107 public class Example {
108 public Example(Object example) {
109 if (example == null) {
110 throw new NullPointerException();
111 }
112 }
113 }
114 ]]>
115 </example>
116 </rule>
117</ruleset>