blob: 1f6577e6f18941f883969d2c50ecce9a15019c83 [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>
Maxwell Henderson80bec322024-01-09 15:48:44 -080011 <exclude-pattern>.*/math/proto.*</exclude-pattern>
Brian Silverman8fce7482020-01-05 13:18:21 -080012
13 <rule ref="category/java/bestpractices.xml">
14 <exclude name="AccessorClassGeneration" />
15 <exclude name="AccessorMethodGeneration" />
16 <exclude name="AvoidPrintStackTrace" />
James Kuszmaulcf324122023-01-14 14:07:17 -080017 <exclude name="AvoidReassigningCatchVariables" />
Brian Silverman8fce7482020-01-05 13:18:21 -080018 <exclude name="AvoidReassigningParameters" />
Austin Schuh812d0d12021-11-04 20:16:48 -070019 <exclude name="AvoidUsingHardCodedIP" />
20 <exclude name="ConstantsInInterface" />
Brian Silverman8fce7482020-01-05 13:18:21 -080021 <exclude name="JUnitAssertionsShouldIncludeMessage" />
22 <exclude name="JUnitTestContainsTooManyAsserts" />
James Kuszmaulcf324122023-01-14 14:07:17 -080023 <exclude name="JUnitTestsShouldIncludeAssert" />
Brian Silverman8fce7482020-01-05 13:18:21 -080024 <exclude name="JUnit4TestShouldUseAfterAnnotation" />
25 <exclude name="JUnit4TestShouldUseBeforeAnnotation" />
26 <exclude name="JUnit4TestShouldUseTestAnnotation" />
Austin Schuh812d0d12021-11-04 20:16:48 -070027 <exclude name="LooseCoupling" />
James Kuszmaulcf324122023-01-14 14:07:17 -080028 <exclude name="PreserveStackTrace" />
Brian Silverman8fce7482020-01-05 13:18:21 -080029 <exclude name="ReplaceHashtableWithMap" />
30 <exclude name="ReplaceVectorWithList" />
31 <exclude name="SwitchStmtsShouldHaveDefault" />
32 <exclude name="SystemPrintln" />
33 <exclude name="UseVarargs" />
34 </rule>
35 <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
36 <properties>
37 <property name="violationSuppressRegex"
Austin Schuh812d0d12021-11-04 20:16:48 -070038 value=".*'.*Arguments\(\)'.*" />
Brian Silverman8fce7482020-01-05 13:18:21 -080039 </properties>
40 </rule>
41
42 <rule ref="category/java/design.xml">
Austin Schuh812d0d12021-11-04 20:16:48 -070043 <exclude name="AvoidThrowingRawExceptionTypes" />
Austin Schuh75263e32022-02-22 18:05:32 -080044 <exclude name="CognitiveComplexity" />
Austin Schuh812d0d12021-11-04 20:16:48 -070045 <exclude name="CyclomaticComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080046 <exclude name="DataClass" />
Austin Schuh812d0d12021-11-04 20:16:48 -070047 <exclude name="ExcessiveClassLength" />
48 <exclude name="ExcessiveImports" />
49 <exclude name="ExcessiveMethodLength" />
50 <exclude name="ExcessiveParameterList" />
51 <exclude name="ExcessivePublicCount" />
52 <exclude name="GodClass" />
Brian Silverman8fce7482020-01-05 13:18:21 -080053 <exclude name="LawOfDemeter" />
54 <exclude name="LoosePackageCoupling" />
Austin Schuh812d0d12021-11-04 20:16:48 -070055 <exclude name="NPathComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080056 <exclude name="NcssConstructorCount" />
57 <exclude name="NcssCount" />
58 <exclude name="NcssMethodCount" />
Austin Schuh812d0d12021-11-04 20:16:48 -070059 <exclude name="TooManyFields" />
Austin Schuh1e69f942020-11-14 15:06:14 -080060 <exclude name="TooManyMethods" />
Brian Silverman8fce7482020-01-05 13:18:21 -080061 </rule>
62
63 <rule ref="category/java/errorprone.xml">
64 <exclude name="AssignmentToNonFinalStatic" />
James Kuszmaulcf324122023-01-14 14:07:17 -080065 <exclude name="AvoidCatchingThrowable" />
Brian Silverman8fce7482020-01-05 13:18:21 -080066 <exclude name="AvoidDuplicateLiterals" />
67 <exclude name="AvoidLiteralsInIfCondition" />
Austin Schuh75263e32022-02-22 18:05:32 -080068 <exclude name="CloseResource" />
Brian Silverman8fce7482020-01-05 13:18:21 -080069 <exclude name="ConstructorCallsOverridableMethod" />
70 <exclude name="DataflowAnomalyAnalysis" />
Austin Schuh75263e32022-02-22 18:05:32 -080071 <exclude name="DoNotTerminateVM" />
James Kuszmaulcf324122023-01-14 14:07:17 -080072 <exclude name="EmptyCatchBlock" />
73 <exclude name="EmptyWhileStmt" />
Brian Silverman8fce7482020-01-05 13:18:21 -080074 <exclude name="FinalizeDoesNotCallSuperFinalize" />
75 <exclude name="JUnitSpelling" />
76 <exclude name="MissingSerialVersionUID" />
James Kuszmaulb13e13f2023-11-22 20:44:04 -080077 <exclude name="NonSerializableClass" />
Brian Silverman8fce7482020-01-05 13:18:21 -080078 <exclude name="NullAssignment" />
79 </rule>
80
81 <rule ref="category/java/multithreading.xml">
82 <exclude name="AvoidSynchronizedAtMethodLevel" />
83 <exclude name="AvoidUsingVolatile" />
84 <exclude name="DoNotUseThreads" />
85 <exclude name="UseConcurrentHashMap" />
86 </rule>
87
88 <rule ref="category/java/performance.xml">
89 <exclude name="AvoidUsingShortType" />
Austin Schuh812d0d12021-11-04 20:16:48 -070090 <exclude name="AvoidInstantiatingObjectsInLoops" />
Brian Silverman8fce7482020-01-05 13:18:21 -080091 </rule>
92
Austin Schuh812d0d12021-11-04 20:16:48 -070093 <rule name="UnnecessaryCastRule" language="java"
94 message="Avoid unnecessary casts"
Austin Schuh75263e32022-02-22 18:05:32 -080095 class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryCastRule"
96 externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryCastRule.java" />
Brian Silverman8fce7482020-01-05 13:18:21 -080097
98 <!-- Custom Rules -->
99 <rule name="UseRequireNonNull"
Austin Schuh812d0d12021-11-04 20:16:48 -0700100 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
101 language="java" class="net.sourceforge.pmd.lang.rule.XPathRule">
Brian Silverman8fce7482020-01-05 13:18:21 -0800102 <description>Use Objects.requireNonNull() instead of throwing a
Austin Schuh812d0d12021-11-04 20:16:48 -0700103 NullPointerException yourself.</description>
Brian Silverman8fce7482020-01-05 13:18:21 -0800104 <properties>
105 <property name="xpath">
106 <value>
107 <![CDATA[
108 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
109 ]]>
110 </value>
111 </property>
112 </properties>
113 <priority>3</priority>
114 <example>
115<![CDATA[
116 public class Example {
117 public Example(Object example) {
118 if (example == null) {
119 throw new NullPointerException();
120 }
121 }
122 }
123 ]]>
124 </example>
125 </rule>
126</ruleset>