Skip to content
Snippets Groups Projects
pmd-rules.xml 5.07 KiB
<?xml version="1.0"?>
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         name="pmd"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

  <description>
      DNA analyser PMD ruleset
  </description>

	<!-- https://pmd.github.io/latest/pmd_rules_java.html -->
 
  <rule ref="category/java/bestpractices.xml" >
	  <!-- doesn't work - false positives - Lombok annotations, conflict with Checkstyle -->
	  <exclude name="UnusedImports" />
	
	  <!-- not useful in some cases -->
	  <exclude name="UseVarargs" />
	
	  <!-- conflict with Checkstyle -->
	  <exclude name="AvoidReassigningParameters" />
	
	  <!-- doesn't work -->
	  <exclude name="GuardLogStatement" />
	
	  <!-- low priority -->
	  <exclude name="AbstractClassWithoutAbstractMethod" />
  </rule>   

  <rule ref="category/java/codestyle.xml" >
	  <!-- default constructor inherited from Object is OK -->
	  <exclude name="AtLeastOneConstructor" />
	
	  <!-- controversial -->
	  <exclude name="AvoidFinalLocalVariable" />
	
	  <!-- conflict with AvoidFinalLocalVariable check -->
	  <exclude name="LocalVariableCouldBeFinal" />
	
	  <!-- conflict with Checkstyle -->
	  <exclude name="FormalParameterNamingConventions" />
	
	  <!-- controversial -->
	  <exclude name="CallSuperInConstructor" />
	
	  <!-- strongly restricts class naming -->
	  <exclude name="ClassNamingConventions" />
	
	  <!-- controversial -->
	  <exclude name="ConfusingTernary" />
	
	  <!-- doesn't work -->
	  <exclude name="DefaultPackage" />
	
	  <!-- doesn't make sense in some cases -->
	  <exclude name="EmptyMethodInAbstractClassShouldBeAbstract" />
	
	  <!-- conflict with Checkstyle -->
	  <exclude name="FieldDeclarationsShouldBeAtStartOfClass" />
	
	  <!-- conflict with Checkstyle -->
	  <exclude name="FieldNamingConventions" />
	
	  <!-- conflict with Checkstyle -->
	  <exclude name="GenericsNaming" />
	
	  <!-- a longer name is more understandable in some cases -->
	  <exclude name="LongVariable" />
	
	  <!-- controversial -->
	  <exclude name="MethodArgumentCouldBeFinal" />
	
	  <!-- controversial, multiple return statements usually increase readability -->
	  <exclude name="OnlyOneReturn" />
	
	  <!-- doesn't make sense, controversial - example: "public class User" -->
	  <exclude name="ShortClassName" />
	
	  <!-- doesn't make sense, controversial -->
	  <exclude name="ShortMethodName" />
	
	  <!-- doesn't make sense, controversial - example: "id" -->
	  <exclude name="ShortVariable" />
	
	  <!-- low priority -->
	  <exclude name="UnnecessaryAnnotationValueElement" />
  </rule>

  <rule ref="category/java/design.xml" >
		<!-- low priority -->
		<exclude name="AbstractClassWithoutAnyMethod"/>

		<!-- conflict with Checkstyle -->
		<exclude name="AvoidCatchingGenericException"/>
		
		<!-- controversial -->
		<exclude name="DataClass"/>
		
		<!-- conflict with Checkstyle -->
		<exclude name="ExcessiveClassLength"/>
		
		<!-- low priority, hard to solve -->
		<exclude name="LawOfDemeter"/>
		<exclude name="LoosePackageCoupling"/>
		<exclude name="GodClass"/>
		<exclude name="NcssCount"/>
		<exclude name="ExcessiveImports"/>
		<exclude name="TooManyFields"/>
		<exclude name="TooManyMethods"/>
		
		<!-- conflict with Checkstyle -->
		<exclude name="ExcessiveMethodLength"/>
		
		<!-- conflict with Checkstyle -->
		<exclude name="ExcessiveParameterList"/>
		
		<!-- low priority -->
		<exclude name="ExcessivePublicCount"/>
		
		<!-- conflict with Checkstyle -->
		<exclude name="SimplifyBooleanReturns"/>
		
		<!-- doesn't work -->
		<exclude name="ImmutableField" />
		
		<!-- conflict with Checkstyle -->
		<exclude name="AvoidDeeplyNestedIfStmts"/>
		
		<!-- conflict with Checkstyle -->
		<exclude name="UseObjectForClearerAPI"/>
	</rule>

  <rule ref="category/java/errorprone.xml" >
	<!-- OK in some cases -->
	<exclude name="AvoidInstanceofChecksInCatchClause" />
	
	<!-- trouble with IOC, Lombok -->
	<exclude name="BeanMembersShouldSerialize" />
	
	<!-- false positives -->
	<exclude name="DataflowAnomalyAnalysis" />
	
	<exclude name="MissingSerialVersionUID" />
	
	<!-- OK in some cases -->
	<exclude name="NullAssignment" />
	
	<!-- no problem with czech language -->
	<exclude name="UseLocaleWithCaseConversions" />

	<exclude name="CompareObjectsWithEquals" />

	<!-- OK in some cases -->
	<exclude name="AvoidLiteralsInIfCondition" />
  
	<!-- https://checkstyle.sourceforge.io/config_coding.html#NoClone -->
	<exclude name="CloneMethodMustImplementCloneable" />
    <exclude name="CloneMethodReturnTypeMustMatchClassName" />
    <exclude name="CloneThrowsCloneNotSupportedException" />
  </rule>

  <rule ref="category/java/multithreading.xml" />

    <rule ref="category/java/performance.xml" >
	  <!-- performance loss is negligible -->
	<exclude name="AppendCharacterWithChar" />
	<exclude name="SimplifyStartsWith" />
	
	<!-- usually false positives -->
	<exclude name="AvoidInstantiatingObjectsInLoops" />
	
	<!-- low priority -->
	<exclude name="UseStringBufferForStringAppends" />
  </rule>

  <rule ref="category/java/security.xml" />

</ruleset>