<?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>