Skip to content

Commit 544690b

Browse files
authored
1.x: Add PMD code checking tool to the build process (ReactiveX#4068)
* 1.x: Run PMD, cat its result xml * Next attempt * Restore travis.yml * Remove unnecessary task, fix nit
1 parent 3650215 commit 544690b

File tree

2 files changed

+268
-0
lines changed

2 files changed

+268
-0
lines changed

build.gradle

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ buildscript {
66
description = 'RxJava: Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.'
77

88
apply plugin: 'java'
9+
apply plugin: 'pmd'
910
apply plugin: 'jacoco'
1011
apply plugin: 'nebula.rxjava-project'
1112

@@ -60,3 +61,40 @@ jacocoTestReport {
6061
}
6162

6263
build.dependsOn jacocoTestReport
64+
65+
pmd {
66+
toolVersion = '5.4.2'
67+
ignoreFailures = true
68+
sourceSets = [sourceSets.main]
69+
ruleSets = []
70+
ruleSetFiles = files('pmd.xml')
71+
72+
}
73+
74+
pmdMain {
75+
reports {
76+
html.enabled = true
77+
xml.enabled = true
78+
}
79+
}
80+
81+
build.dependsOn pmdMain
82+
83+
task pmdPrint(dependsOn: 'pmdMain') << {
84+
File file = new File('build/reports/pmd/main.xml')
85+
if (file.exists()) {
86+
87+
println("Listing first 100 PMD violations")
88+
89+
file.eachLine { line, count ->
90+
if (count <= 100) {
91+
println(line)
92+
}
93+
}
94+
95+
} else {
96+
println("PMD file not found.")
97+
}
98+
}
99+
100+
build.dependsOn pmdPrint

pmd.xml

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
name="pmd"
5+
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
6+
<description>RxJava PMD ruleset</description>
7+
<rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod"/>
8+
<rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod"/>
9+
<rule ref="rulesets/java/design.xml/AccessorClassGeneration"/>
10+
<rule ref="rulesets/java/optimizations.xml/AddEmptyString"/>
11+
<rule ref="rulesets/java/strings.xml/AppendCharacterWithChar"/>
12+
<rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic"/>
13+
<rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration"/>
14+
<rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops"/>
15+
<rule ref="rulesets/java/migrating.xml/AvoidAssertAsIdentifier"/>
16+
<rule ref="rulesets/java/basic.xml/AvoidBranchingStatementAsLastInLoop"/>
17+
<rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize"/>
18+
<rule ref="rulesets/java/strictexception.xml/AvoidCatchingGenericException"/>
19+
<rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE"/>
20+
<rule ref="rulesets/java/design.xml/AvoidConstantsInterface"/>
21+
<rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/>
22+
<rule ref="rulesets/java/naming.xml/AvoidDollarSigns"/>
23+
<rule ref="rulesets/java/migrating.xml/AvoidEnumAsIdentifier"/>
24+
<rule ref="rulesets/java/controversial.xml/AvoidFinalLocalVariable"/>
25+
<rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause"/>
26+
<rule ref="rulesets/java/strictexception.xml/AvoidLosingExceptionInformation"/>
27+
<rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators"/>
28+
<rule ref="rulesets/java/controversial.xml/AvoidPrefixingMethodParameters"/>
29+
<rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace"/>
30+
<rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass"/>
31+
<rule ref="rulesets/java/design.xml/AvoidProtectedMethodInFinalClassNotExtending"/>
32+
<rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException"/>
33+
<rule ref="rulesets/java/strings.xml/AvoidStringBufferField"/>
34+
<rule ref="rulesets/java/design.xml/AvoidSynchronizedAtMethodLevel"/>
35+
<rule ref="rulesets/java/basic.xml/AvoidThreadGroup"/>
36+
<rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException"/>
37+
<rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes"/>
38+
<rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP"/>
39+
<rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode"/>
40+
<rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues"/>
41+
<rule ref="rulesets/java/controversial.xml/AvoidUsingShortType"/>
42+
<rule ref="rulesets/java/design.xml/BadComparison"/>
43+
<rule ref="rulesets/java/basic.xml/BigIntegerInstantiation"/>
44+
<rule ref="rulesets/java/naming.xml/BooleanGetMethodName"/>
45+
<rule ref="rulesets/java/basic.xml/BooleanInstantiation"/>
46+
<rule ref="rulesets/java/basic.xml/BrokenNullCheck"/>
47+
<rule ref="rulesets/java/migrating.xml/ByteInstantiation"/>
48+
<rule ref="rulesets/java/android.xml/CallSuperFirst"/>
49+
<rule ref="rulesets/java/android.xml/CallSuperLast"/>
50+
<rule ref="rulesets/java/basic.xml/CheckResultSet"/>
51+
<rule ref="rulesets/java/basic.xml/CheckSkipResult"/>
52+
<rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray"/>
53+
<rule ref="rulesets/java/naming.xml/ClassNamingConventions"/>
54+
<rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/>
55+
<rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable"/>
56+
<rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException"/>
57+
<rule ref="rulesets/java/design.xml/CloseResource"/>
58+
<rule ref="rulesets/java/comments.xml/CommentContent"/>
59+
<rule ref="rulesets/java/strings.xml/ConsecutiveAppendsShouldReuse"/>
60+
<rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends"/>
61+
<rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod"/>
62+
<rule ref="rulesets/java/coupling.xml/CouplingBetweenObjects"/>
63+
<rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt"/>
64+
<rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly"/>
65+
<rule ref="rulesets/java/j2ee.xml/DoNotCallSystemExit"/>
66+
<rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError"/>
67+
<rule ref="rulesets/java/android.xml/DoNotHardCodeSDCard"/>
68+
<rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally"/>
69+
<rule ref="rulesets/java/basic.xml/DontCallThreadRun"/>
70+
<rule ref="rulesets/java/imports.xml/DontImportJavaLang"/>
71+
<rule ref="rulesets/java/basic.xml/DontUseFloatTypeForLoopIndices"/>
72+
<rule ref="rulesets/java/basic.xml/DoubleCheckedLocking"/>
73+
<rule ref="rulesets/java/imports.xml/DuplicateImports"/>
74+
<rule ref="rulesets/java/empty.xml/EmptyCatchBlock"/>
75+
<rule ref="rulesets/java/finalizers.xml/EmptyFinalizer"/>
76+
<rule ref="rulesets/java/empty.xml/EmptyFinallyBlock"/>
77+
<rule ref="rulesets/java/empty.xml/EmptyInitializer"/>
78+
<rule ref="rulesets/java/empty.xml/EmptyStatementBlock"/>
79+
<rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop"/>
80+
<rule ref="rulesets/java/empty.xml/EmptyStaticInitializer"/>
81+
<rule ref="rulesets/java/empty.xml/EmptySwitchStatements"/>
82+
<rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock"/>
83+
<rule ref="rulesets/java/empty.xml/EmptyTryBlock"/>
84+
<rule ref="rulesets/java/empty.xml/EmptyWhileStmt"/>
85+
<rule ref="rulesets/java/design.xml/EqualsNull"/>
86+
<rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl"/>
87+
<rule ref="rulesets/java/coupling.xml/ExcessiveImports"/>
88+
<rule ref="rulesets/java/basic.xml/ExtendsObject"/>
89+
<rule ref="rulesets/java/design.xml/FieldDeclarationsShouldBeAtStartOfClass"/>
90+
<rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic"/>
91+
<rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/>
92+
<rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/>
93+
<rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded"/>
94+
<rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected"/>
95+
<rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop"/>
96+
<rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces"/>
97+
<rule ref="rulesets/java/logging-jakarta-commons.xml/GuardDebugLogging"/>
98+
<rule ref="rulesets/java/logging-jakarta-commons.xml/GuardLogStatement"/>
99+
<rule ref="rulesets/java/logging-java.xml/GuardLogStatementJavaUtil"/>
100+
<rule ref="rulesets/java/design.xml/IdempotentOperations"/>
101+
<rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces"/>
102+
<rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces"/>
103+
<rule ref="rulesets/java/design.xml/ImmutableField"/>
104+
<rule ref="rulesets/java/imports.xml/ImportFromSamePackage"/>
105+
<rule ref="rulesets/java/strings.xml/InefficientEmptyStringCheck"/>
106+
<rule ref="rulesets/java/strings.xml/InefficientStringBuffering"/>
107+
<rule ref="rulesets/java/design.xml/InstantiationToGetClass"/>
108+
<rule ref="rulesets/java/strings.xml/InsufficientStringBufferDeclaration"/>
109+
<rule ref="rulesets/java/migrating.xml/IntegerInstantiation"/>
110+
<rule ref="rulesets/java/migrating.xml/JUnit4SuitesShouldUseSuiteAnnotation"/>
111+
<rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseAfterAnnotation"/>
112+
<rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseBeforeAnnotation"/>
113+
<rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseTestAnnotation"/>
114+
<rule ref="rulesets/java/junit.xml/JUnitAssertionsShouldIncludeMessage"/>
115+
<rule ref="rulesets/java/junit.xml/JUnitSpelling"/>
116+
<rule ref="rulesets/java/junit.xml/JUnitStaticSuite"/>
117+
<rule ref="rulesets/java/junit.xml/JUnitTestContainsTooManyAsserts"/>
118+
<rule ref="rulesets/java/junit.xml/JUnitTestsShouldIncludeAssert"/>
119+
<rule ref="rulesets/java/migrating.xml/JUnitUseExpected"/>
120+
<rule ref="rulesets/java/basic.xml/JumbledIncrementer"/>
121+
<rule ref="rulesets/java/j2ee.xml/LocalHomeNamingConvention"/>
122+
<rule ref="rulesets/java/j2ee.xml/LocalInterfaceSessionNamingConvention"/>
123+
<rule ref="rulesets/java/logging-java.xml/LoggerIsNotStaticFinal"/>
124+
<rule ref="rulesets/java/design.xml/LogicInversion"/>
125+
<rule ref="rulesets/java/migrating.xml/LongInstantiation"/>
126+
<rule ref="rulesets/java/coupling.xml/LooseCoupling"/>
127+
<rule ref="rulesets/java/j2ee.xml/MDBAndSessionBeanNamingConvention"/>
128+
<rule ref="rulesets/java/naming.xml/MethodNamingConventions"/>
129+
<rule ref="rulesets/java/sunsecure.xml/MethodReturnsInternalArray"/>
130+
<rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass"/>
131+
<rule ref="rulesets/java/naming.xml/MisleadingVariableName"/>
132+
<rule ref="rulesets/java/basic.xml/MisplacedNullCheck"/>
133+
<rule ref="rulesets/java/design.xml/MissingBreakInSwitch"/>
134+
<rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID"/>
135+
<rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass"/>
136+
<rule ref="rulesets/java/logging-java.xml/MoreThanOneLogger"/>
137+
<rule ref="rulesets/java/codesize.xml/NcssConstructorCount"/>
138+
<rule ref="rulesets/java/codesize.xml/NcssMethodCount"/>
139+
<rule ref="rulesets/java/codesize.xml/NcssTypeCount"/>
140+
<rule ref="rulesets/java/naming.xml/NoPackage"/>
141+
<rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement"/>
142+
<rule ref="rulesets/java/design.xml/NonStaticInitializer"/>
143+
<rule ref="rulesets/java/design.xml/NonThreadSafeSingleton"/>
144+
<rule ref="rulesets/java/controversial.xml/OneDeclarationPerLine"/>
145+
<rule ref="rulesets/java/design.xml/OptimizableToArrayCall"/>
146+
<rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode"/>
147+
<rule ref="rulesets/java/naming.xml/PackageCase"/>
148+
<rule ref="rulesets/java/design.xml/PositionLiteralsFirstInCaseInsensitiveComparisons"/>
149+
<rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons"/>
150+
<rule ref="rulesets/java/optimizations.xml/PrematureDeclaration"/>
151+
<rule ref="rulesets/java/design.xml/PreserveStackTrace"/>
152+
<rule ref="rulesets/java/clone.xml/ProperCloneImplementation"/>
153+
<rule ref="rulesets/java/logging-jakarta-commons.xml/ProperLogger"/>
154+
<rule ref="rulesets/java/optimizations.xml/RedundantFieldInitializer"/>
155+
<rule ref="rulesets/java/j2ee.xml/RemoteInterfaceNamingConvention"/>
156+
<rule ref="rulesets/java/j2ee.xml/RemoteSessionInterfaceNamingConvention"/>
157+
<rule ref="rulesets/java/migrating.xml/ReplaceEnumerationWithIterator"/>
158+
<rule ref="rulesets/java/migrating.xml/ReplaceHashtableWithMap"/>
159+
<rule ref="rulesets/java/migrating.xml/ReplaceVectorWithList"/>
160+
<rule ref="rulesets/java/design.xml/ReturnEmptyArrayRatherThanNull"/>
161+
<rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock"/>
162+
<rule ref="rulesets/java/migrating.xml/ShortInstantiation"/>
163+
<rule ref="rulesets/java/naming.xml/ShortMethodName"/>
164+
<rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException"/>
165+
<rule ref="rulesets/java/design.xml/SimpleDateFormatNeedsLocale"/>
166+
<rule ref="rulesets/java/junit.xml/SimplifyBooleanAssertion"/>
167+
<rule ref="rulesets/java/design.xml/SimplifyBooleanExpressions"/>
168+
<rule ref="rulesets/java/design.xml/SimplifyBooleanReturns"/>
169+
<rule ref="rulesets/java/design.xml/SimplifyConditional"/>
170+
<rule ref="rulesets/java/optimizations.xml/SimplifyStartsWith"/>
171+
<rule ref="rulesets/java/design.xml/SingularField"/>
172+
<rule ref="rulesets/java/j2ee.xml/StaticEJBFieldShouldBeFinal"/>
173+
<rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar"/>
174+
<rule ref="rulesets/java/strings.xml/StringInstantiation"/>
175+
<rule ref="rulesets/java/strings.xml/StringToString"/>
176+
<rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName"/>
177+
<rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName"/>
178+
<rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName"/>
179+
<rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape"/>
180+
<rule ref="rulesets/java/design.xml/SwitchDensity"/>
181+
<rule ref="rulesets/java/design.xml/SwitchStmtsShouldHaveDefault"/>
182+
<rule ref="rulesets/java/logging-java.xml/SystemPrintln"/>
183+
<rule ref="rulesets/java/junit.xml/TestClassWithoutTestCases"/>
184+
<rule ref="rulesets/java/design.xml/TooFewBranchesForASwitchStatement"/>
185+
<rule ref="rulesets/java/imports.xml/TooManyStaticImports"/>
186+
<rule ref="rulesets/java/design.xml/UncommentedEmptyConstructor"/>
187+
<rule ref="rulesets/java/design.xml/UncommentedEmptyMethodBody"/>
188+
<rule ref="rulesets/java/basic.xml/UnconditionalIfStatement"/>
189+
<rule ref="rulesets/java/junit.xml/UnnecessaryBooleanAssertion"/>
190+
<rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange"/>
191+
<rule ref="rulesets/java/controversial.xml/UnnecessaryConstructor"/>
192+
<rule ref="rulesets/java/unnecessary.xml/UnnecessaryConversionTemporary"/>
193+
<rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier"/>
194+
<rule ref="rulesets/java/imports.xml/UnnecessaryFullyQualifiedName"/>
195+
<rule ref="rulesets/java/design.xml/UnnecessaryLocalBeforeReturn"/>
196+
<rule ref="rulesets/java/controversial.xml/UnnecessaryParentheses"/>
197+
<rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn"/>
198+
<rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation"/>
199+
<rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter"/>
200+
<rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter"/>
201+
<rule ref="rulesets/java/imports.xml/UnusedImports"/>
202+
<rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable"/>
203+
<rule ref="rulesets/java/unusedcode.xml/UnusedModifier"/>
204+
<rule ref="rulesets/java/unnecessary.xml/UnusedNullCheckInEquals"/>
205+
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField"/>
206+
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"/>
207+
<rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector"/>
208+
<rule ref="rulesets/java/optimizations.xml/UseArraysAsList"/>
209+
<rule ref="rulesets/java/junit.xml/UseAssertEqualsInsteadOfAssertTrue"/>
210+
<rule ref="rulesets/java/junit.xml/UseAssertNullInsteadOfAssertTrue"/>
211+
<rule ref="rulesets/java/junit.xml/UseAssertSameInsteadOfAssertTrue"/>
212+
<rule ref="rulesets/java/junit.xml/UseAssertTrueInsteadOfAssertEquals"/>
213+
<rule ref="rulesets/java/design.xml/UseCollectionIsEmpty"/>
214+
<rule ref="rulesets/java/controversial.xml/UseConcurrentHashMap"/>
215+
<rule ref="rulesets/java/logging-jakarta-commons.xml/UseCorrectExceptionLogging"/>
216+
<rule ref="rulesets/java/strings.xml/UseEqualsToCompareStrings"/>
217+
<rule ref="rulesets/java/strings.xml/UseIndexOfChar"/>
218+
<rule ref="rulesets/java/design.xml/UseLocaleWithCaseConversions"/>
219+
<rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify"/>
220+
<rule ref="rulesets/java/controversial.xml/UseObjectForClearerAPI"/>
221+
<rule ref="rulesets/java/j2ee.xml/UseProperClassLoader"/>
222+
<rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends"/>
223+
<rule ref="rulesets/java/strings.xml/UseStringBufferLength"/>
224+
<rule ref="rulesets/java/design.xml/UseUtilityClass"/>
225+
<rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable"/>
226+
<rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod"/>
227+
<rule ref="rulesets/java/strings.xml/UselessStringValueOf"/>
228+
<rule ref="rulesets/java/naming.xml/VariableNamingConventions"/>
229+
<rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces"/>
230+
</ruleset>

0 commit comments

Comments
 (0)