diff --git a/readme.md b/readme.md index 168e77f..d9bdc23 100644 --- a/readme.md +++ b/readme.md @@ -19,421 +19,121 @@ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/53d3d211de354b45a06aaa82dcf432b5)](https://www.codacy.com/gh/dgroup/arch4u-pmd/dashboard?utm_source=github.com&utm_medium=referral&utm_content=dgroup/arch4u-pmd&utm_campaign=Badge_Grade) [![Codecov](https://codecov.io/gh/dgroup/arch4u-pmd/branch/master/graph/badge.svg)](https://codecov.io/gh/dgroup/arch4u-pmd) -* [Overview](#overview) -* [How to use?](#how-to-use) -* [How to contribute?](#how-to-contribute) -* [Contributors](#contributors) +* [Overview](#overview) +* [How to use?](#how-to-use) +* [How to contribute?](#how-to-contribute) +* [Contributors](#contributors) ### Overview -**arch4u-pmd** is a library with pmd rules that bring new regulations related to known problems in REST API, logging, monitoring, etc., including reconfigured default/out of box pmd rules considering well-known frameworks like Spring, Quarkus, etc. -We are using the latest stable pmd-java version which is `6.42.0` as a start point. +**arch4u-pmd** is a library with pmd rules that bring new regulations related to known problems in +REST API, logging, monitoring, etc., including reconfigured default pmd +rules to decrease false-positive +violations during usage of well-known frameworks like Spring, Quarkus, etc. -*Legend* +In addition to our custom/reconfigured rules we are using the latest stable pmd-java version which is `6.42.0` with more than [320+ rules](https://pmd.github.io/pmd-6.42.0/pmd_rules_java.html) with default configuration. -🚴🏽 - in-progress, -⌛ - planned for review considering framework architecture, -✅ - enabled in `arch4u-ruleset.xml`, -🌵 - reconfigured in `arch4u-ruleset.xml`, -❌ - disabled/not planned in `arch4u-ruleset.xml` +*Legend* -| PMD rule | Provider | Since | Status | Spring | Quarkus | -|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------:|:------:|:------:|:------:|:-------:| -| [UseExistingMediaTypeConstant](https://github.com/dgroup/arch4u-pmd/discussions/43) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [UseOpenApiInRestEndpoints](https://github.com/dgroup/arch4u-pmd/discussions/73) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [RestEndpointsWithoutExposedMetrics](https://github.com/dgroup/arch4u-pmd/discussions/74) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [UseConstantAsMetricName](https://github.com/dgroup/arch4u-pmd/discussions/75) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [NoMandatoryConstructorInExceptionClass](https://github.com/dgroup/arch4u-pmd/discussions/31) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [AvoidUsingObjectMapperAsALocalVariable](https://github.com/dgroup/arch4u-pmd/discussions/30) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [AvoidMdcOutsideTryStatement](https://github.com/dgroup/arch4u-pmd/discussions/86) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [PotentiallyThreadLocalPollutionByMdc](https://github.com/dgroup/arch4u-pmd/discussions/88) | arch4u-pmd | 0.1.0 | ✅ | ⌛ | ⌛ | -| [AbstractClassWithoutAbstractMethod](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#abstractclasswithoutabstractmethod) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AccessorClassGeneration](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#accessorclassgeneration) | pmd-java | 1.04 | ✅ | ⌛ | ⌛ | -| [AccessorMethodGeneration](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#accessormethodgeneration) | pmd-java | 5.5.4 | ✅ | ⌛ | ⌛ | -| [ArrayIsStoredDirectly](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#arrayisstoreddirectly) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [AvoidMessageDigestField](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidmessagedigestfield) | pmd-java | 6.18.0 | ✅ | ⌛ | ⌛ | -| [AvoidPrintStackTrace](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidprintstacktrace) | pmd-java | 3.2 | ✅ | ⌛ | ⌛ | -| [AvoidReassigningCatchVariables](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidreassigningcatchvariables) | pmd-java | 6.27.0 | ✅ | ⌛ | ⌛ | -| [AvoidReassigningLoopVariables](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidreassigningloopvariables) | pmd-java | 6.11.0 | ✅ | ⌛ | ⌛ | -| [AvoidReassigningParameters](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidreassigningparameters) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [AvoidStringBufferField](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidstringbufferfield) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [AvoidUsingHardCodedIP](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#avoidusinghardcodedip) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [CheckResultSet](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#checkresultset) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [ConstantsInInterface](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#constantsininterface) | pmd-java | 5.5 | ✅ | ⌛ | ⌛ | -| [DefaultLabelNotLastInSwitchStmt](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#defaultlabelnotlastinswitchstmt) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [DoubleBraceInitialization](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#doublebraceinitialization) | pmd-java | 6.16.0 | ✅ | ⌛ | ⌛ | -| [ForLoopCanBeForeach](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#forloopcanbeforeach) | pmd-java | 6.0.0 | ✅ | ⌛ | ⌛ | -| [ForLoopVariableCount](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#forloopvariablecount) | pmd-java | 6.11.0 | ✅ | ⌛ | ⌛ | -| [GuardLogStatement](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#guardlogstatement) | pmd-java | 5.1.0 | ❌ | ⌛ | ⌛ | -| [JUnit4SuitesShouldUseSuiteAnnotation](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junit4suitesshouldusesuiteannotation) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [JUnit4TestShouldUseAfterAnnotation](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junit4testshoulduseafterannotation) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [JUnit4TestShouldUseBeforeAnnotation](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junit4testshouldusebeforeannotation) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [JUnit4TestShouldUseTestAnnotation](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junit4testshouldusetestannotation) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [JUnit5TestShouldBePackagePrivate](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junit5testshouldbepackageprivate) | pmd-java | 6.35.0 | ✅ | ⌛ | ⌛ | -| [JUnitAssertionsShouldIncludeMessage](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junitassertionsshouldincludemessage) | pmd-java | 1.04 | 🌵 | ⌛ | ⌛ | -| [JUnitTestContainsTooManyAsserts](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junittestcontainstoomanyasserts) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [JUnitTestsShouldIncludeAssert](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junittestsshouldincludeassert) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [JUnitUseExpected](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junituseexpected) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [LiteralsFirstInComparisons](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#literalsfirstincomparisons) | pmd-java | 6.24.0 | ✅ | ⌛ | ⌛ | -| [LooseCoupling](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#loosecoupling) | pmd-java | 0.7 | ✅ | ⌛ | ⌛ | -| [MethodReturnsInternalArray](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#methodreturnsinternalarray) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [MissingOverride](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#missingoverride) | pmd-java | 6.2.0 | ✅ | ⌛ | ⌛ | -| [OneDeclarationPerLine](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#onedeclarationperline) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [PositionLiteralsFirstInCaseInsensitiveComparisons](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#positionliteralsfirstincaseinsensitivecomparisons) | pmd-java | 5.1 | ✅ | ⌛ | ⌛ | -| [PositionLiteralsFirstInComparisons](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#positionliteralsfirstincomparisons) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [PreserveStackTrace](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#preservestacktrace) | pmd-java | 3.7 | ✅ | ⌛ | ⌛ | -| [PrimitiveWrapperInstantiation](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation) | pmd-java | 6.37.0 | ✅ | ⌛ | ⌛ | -| [ReplaceEnumerationWithIterator](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#replaceenumerationwithiterator) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [ReplaceHashtableWithMap](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#replacehashtablewithmap) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [ReplaceVectorWithList](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#replacevectorwithlist) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [SimplifiableTestAssertion](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#simplifiabletestassertion) | pmd-java | 6.37.0 | ✅ | ⌛ | ⌛ | -| [SwitchStmtsShouldHaveDefault](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#switchstmtsshouldhavedefault) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [SystemPrintln](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#systemprintln) | pmd-java | 2.1 | ✅ | ⌛ | ⌛ | -| [UnusedAssignment](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedassignment) | pmd-java | 6.26.0 | ✅ | ⌛ | ⌛ | -| [UnusedFormalParameter](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedformalparameter) | pmd-java | 0.8 | ✅ | ⌛ | ⌛ | -| [UnusedImports](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedimports) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [UnusedLocalVariable](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedlocalvariable) | pmd-java | 0.1 | ✅ | ⌛ | ⌛ | -| [UnusedPrivateField](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedprivatefield) | pmd-java | 0.1 | ✅ | ⌛ | ⌛ | -| [UnusedPrivateMethod](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedprivatemethod) | pmd-java | 0.7 | 🌵 | ⌛ | ⌛ | -| [UseAssertEqualsInsteadOfAssertTrue](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#useassertequalsinsteadofasserttrue) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [UseAssertNullInsteadOfAssertTrue](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#useassertnullinsteadofasserttrue) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [UseAssertSameInsteadOfAssertTrue](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#useassertsameinsteadofasserttrue) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [UseAssertTrueInsteadOfAssertEquals](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#useasserttrueinsteadofassertequals) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [UseCollectionIsEmpty](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#usecollectionisempty) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [UseStandardCharsets](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#usestandardcharsets) | pmd-java | 6.34.0 | ✅ | ⌛ | ⌛ | -| [UseTryWithResources](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#usetrywithresources) | pmd-java | 6.12.0 | ✅ | ⌛ | ⌛ | -| [UseVarargs](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#usevarargs) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [WhileLoopWithLiteralBoolean](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#whileloopwithliteralboolean) | pmd-java | 6.13.0 | ✅ | ⌛ | ⌛ | -| [AbstractNaming](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#abstractnaming) | pmd-java | 1.4 | ✅ | ⌛ | ⌛ | -| [AtLeastOneConstructor](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#atleastoneconstructor) | pmd-java | 1.04 | 🌵 | ✅ | ⌛ | -| [AvoidDollarSigns](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoiddollarsigns) | pmd-java | 1.4 | ✅ | ⌛ | ⌛ | -| [AvoidFinalLocalVariable](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoidfinallocalvariable) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [AvoidPrefixingMethodParameters](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [AvoidProtectedFieldInFinalClass](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass) | pmd-java | 2.1 | ✅ | ⌛ | ⌛ | -| [AvoidProtectedMethodInFinalClassNotExtending](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending) | pmd-java | 5.1 | ✅ | ⌛ | ⌛ | -| [AvoidUsingNativeCode](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#avoidusingnativecode) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [BooleanGetMethodName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#booleangetmethodname) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [CallSuperInConstructor](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#callsuperinconstructor) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [ClassNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#classnamingconventions) | pmd-java | 1.2 | ✅ | ⌛ | ⌛ | -| [CommentDefaultAccessModifier](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier) | pmd-java | 5.4.0 | ✅ | ⌛ | ⌛ | -| [ConfusingTernary](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#confusingternary) | pmd-java | 1.9 | ✅ | ⌛ | ⌛ | -| [ControlStatementBraces](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#controlstatementbraces) | pmd-java | 6.2.0 | ✅ | ⌛ | ⌛ | -| [DefaultPackage](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#defaultpackage) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [DontImportJavaLang](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#dontimportjavalang) | pmd-java | 0.5 | ✅ | ⌛ | ⌛ | -| [DuplicateImports](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#duplicateimports) | pmd-java | 0.5 | ✅ | ⌛ | ⌛ | -| [EmptyMethodInAbstractClassShouldBeAbstract](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [ExtendsObject](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#extendsobject) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [FieldDeclarationsShouldBeAtStartOfClass](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [FieldNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#fieldnamingconventions) | pmd-java | 6.7.0 | ✅ | ⌛ | ⌛ | -| [FinalParameterInAbstractMethod](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#finalparameterinabstractmethod) | pmd-java | 6.42.0 | ✅ | ⌛ | ⌛ | -| [ForLoopShouldBeWhileLoop](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#forloopshouldbewhileloop) | pmd-java | 1.02 | ✅ | ⌛ | ⌛ | -| [ForLoopsMustUseBraces](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#forloopsmustusebraces) | pmd-java | 0.7 | ✅ | ⌛ | ⌛ | -| [GenericsNaming](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#genericsnaming) | pmd-java | 4.2.6 | ✅ | ⌛ | ⌛ | -| [FormalParameterNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#formalparameternamingconventions) | pmd-java | 6.4.0 | ✅ | ⌛ | ⌛ | -| [IfElseStmtsMustUseBraces](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#ifelsestmtsmustusebraces) | pmd-java | 0.2 | ✅ | ⌛ | ⌛ | -| [IfStmtsMustUseBraces](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#ifstmtsmustusebraces) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [LocalHomeNamingConvention](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#abstractclasswithoutabstractmethod) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [IdenticalCatchBranches](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#localhomenamingconvention) | pmd-java | 6.4.0 | ✅ | ⌛ | ⌛ | -| [LinguisticNaming](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#linguisticnaming) | pmd-java | 6.7.0 | ✅ | ⌛ | ⌛ | -| [LocalInterfaceSessionNamingConvention](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#localinterfacesessionnamingconvention) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [LocalVariableCouldBeFinal](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#localvariablecouldbefinal) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [LocalVariableNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#localvariablenamingconventions) | pmd-java | 6.6.0 | ✅ | ⌛ | ⌛ | -| [LongVariable](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#longvariable) | pmd-java | 0.3 | ✅ | ⌛ | ⌛ | -| [MDBAndSessionBeanNamingConvention](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [MethodArgumentCouldBeFinal](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#methodargumentcouldbefinal) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [MethodNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#methodnamingconventions) | pmd-java | 1.2 | ✅ | ⌛ | ⌛ | -| [MIsLeadingVariableName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#misleadingvariablename) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [NoPackage](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#nopackage) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [UseUnderscoresInNumericLiterals](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals) | pmd-java | 6.10.0 | ✅ | ⌛ | ⌛ | -| [OnlyOneReturn](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#onlyonereturn) | pmd-java | 6.10.0 | 🌵 | ⌛ | ⌛ | -| [PackageCase](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#packagecase) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [PrematureDeclaration](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#prematuredeclaration) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [RemoteInterfaceNamingConvention](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [RemoteSessionInterfaceNamingConvention](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [ShortClassName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#shortclassname) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [ShortMethodName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#shortmethodname) | pmd-java | 0.3 | ✅ | ⌛ | ⌛ | -| [ShortVariable](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#shortvariable) | pmd-java | 0.3 | ✅ | ⌛ | ⌛ | -| [SuspiciousConstantFieldName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#suspiciousconstantfieldname) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [TooManyStaticImports](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#toomanystaticimports) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [UnnecessaryAnnotationValueElement](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement) | pmd-java | 6.2.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryCast](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessarycast) | pmd-java | 6.24.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryConstructor](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessaryconstructor) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryFullyQualifiedName](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryImport](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessaryimport) | pmd-java | 6.34.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryLocalBeforeReturn](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [UnnecessaryModifier](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessarymodifier) | pmd-java | 1.02 | ✅ | ⌛ | ⌛ | -| [UnnecessaryReturn](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#unnecessaryreturn) | pmd-java | 1.3 | ✅ | ⌛ | ⌛ | -| [UseDiamondOperator](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#usediamondoperator) | pmd-java | 6.11.0 | ✅ | ⌛ | ⌛ | -| [UselessParentheses](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#uselessparentheses) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [UselessQualifiedThis](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#uselessqualifiedthis) | pmd-java | 5.4.0 | ✅ | ⌛ | ⌛ | -| [UseShortArrayInitializer](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#useshortarrayinitializer) | pmd-java | 6.15.0 | ✅ | ⌛ | ⌛ | -| [VariableNamingConventions](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#variablenamingconventions) | pmd-java | 1.2 | ✅ | ⌛ | ⌛ | -| [WhileLoopsMustUseBraces](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#whileloopsmustusebraces) | pmd-java | 0.7 | ✅ | ⌛ | ⌛ | -| [AddEmptyString](https://pmd.github.io/latest/pmd_rules_java_performance.html#addemptystring) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [AppendCharacterWithChar](https://pmd.github.io/latest/pmd_rules_java_performance.html#appendcharacterwithchar) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [AvoidArrayLoops](https://pmd.github.io/latest/pmd_rules_java_performance.html#avoidarrayloops) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [AvoidCalendarDateCreation](https://pmd.github.io/latest/pmd_rules_java_performance.html#avoidcalendardatecreation) | pmd-java | 6.25.0 | ✅ | ⌛ | ⌛ | -| [AvoidFileStream](https://pmd.github.io/latest/pmd_rules_java_performance.html#avoidfilestream) | pmd-java | 6.0.0 | ✅ | ⌛ | ⌛ | -| [AvoidInstantiatingObjectsInLoops](https://pmd.github.io/latest/pmd_rules_java_performance.html#avoidinstantiatingobjectsinloops) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [AvoidUsingShortType](https://pmd.github.io/latest/pmd_rules_java_performance.html#avoidusingshorttype) | pmd-java | 4.1 | ❌ | ⌛ | ⌛ | -| [BigIntegerInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#bigintegerinstantiation) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [BooleanInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#booleaninstantiation) | pmd-java | 1.2 | ❌ | ⌛ | ⌛ | -| [ByteInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#byteinstantiation) | pmd-java | 4.0 | ❌ | ⌛ | ⌛ | -| [ConsecutiveAppendsShouldReuse](https://pmd.github.io/latest/pmd_rules_java_performance.html#consecutiveappendsshouldreuse) | pmd-java | 5.1 | ✅ | ⌛ | ⌛ | -| [ConsecutiveLiteralAppends](https://pmd.github.io/latest/pmd_rules_java_performance.html#consecutiveliteralappends) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [InefficientEmptyStringCheck](https://pmd.github.io/latest/pmd_rules_java_performance.html#inefficientemptystringcheck) | pmd-java | 3.6 | ✅ | ⌛ | ⌛ | -| [InefficientStringBuffering](https://pmd.github.io/latest/pmd_rules_java_performance.html#inefficientstringbuffering) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [InsufficientStringBufferDeclaration](https://pmd.github.io/latest/pmd_rules_java_performance.html#insufficientstringbufferdeclaration) | pmd-java | 3.6 | ✅ | ⌛ | ⌛ | -| [IntegerInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#integerinstantiation) | pmd-java | 3.5 | ❌ | ⌛ | ⌛ | -| [LongInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#longinstantiation) | pmd-java | 4.0 | ❌ | ⌛ | ⌛ | -| [OptimizableToArrayCall](https://pmd.github.io/latest/pmd_rules_java_performance.html#optimizabletoarraycall) | pmd-java | 1.8 | ✅ | ⌛ | ⌛ | -| [RedundantFieldInitializer](https://pmd.github.io/latest/pmd_rules_java_performance.html#redundantfieldinitializer) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [ShortInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#shortinstantiation) | pmd-java | 4.0 | ❌ | ⌛ | ⌛ | -| [SimplifyStartsWith](https://pmd.github.io/latest/pmd_rules_java_performance.html#simplifystartswith) | pmd-java | 3.1 | ❌ | ⌛ | ⌛ | -| [StringInstantiation](https://pmd.github.io/latest/pmd_rules_java_performance.html#stringinstantiation) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [StringToString](https://pmd.github.io/latest/pmd_rules_java_performance.html#stringtostring) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [TooFewBranchesForASwitchStatement](https://pmd.github.io/latest/pmd_rules_java_performance.html#toofewbranchesforaswitchstatement) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [UnnecessaryWrapperObjectCreation](https://pmd.github.io/latest/pmd_rules_java_performance.html#unnecessarywrapperobjectcreation) | pmd-java | 3.8 | ✅ | ⌛ | ⌛ | -| [UseArrayListInsteadOfVector](https://pmd.github.io/latest/pmd_rules_java_performance.html#usearraylistinsteadofvector) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [UseArraysAsList](https://pmd.github.io/latest/pmd_rules_java_performance.html#usearraysaslist) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [UseIndexOfChar](https://pmd.github.io/latest/pmd_rules_java_performance.html#useindexofchar) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [UseIOStreamsWithApacheCommonsFileItem](https://pmd.github.io/latest/pmd_rules_java_performance.html#useiostreamswithapachecommonsfileitem) | pmd-java | 6.25.0 | ✅ | ⌛ | ⌛ | -| [UselessStringValueOf](https://pmd.github.io/latest/pmd_rules_java_performance.html#uselessstringvalueof) | pmd-java | 3.8 | ✅ | ⌛ | ⌛ | -| [UseStringBufferForStringAppends](https://pmd.github.io/latest/pmd_rules_java_performance.html#usestringbufferforstringappends) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [UseStringBufferLength](https://pmd.github.io/latest/pmd_rules_java_performance.html#usestringbufferlength) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [AvoidSynchronizedAtMethodLevel](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#avoidsynchronizedatmethodlevel) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AvoidThreadGroup](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#avoidthreadgroup) | pmd-java | 3.6 | ✅ | ⌛ | ⌛ | -| [AvoidUsingVolatile](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#avoidusingvolatile) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [DoNotUseThreads](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#donotusethreads) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [DontCallThreadRun](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#dontcallthreadrun) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [DoubleCheckedLocking](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#doublecheckedlocking) | pmd-java | 1.04 | ✅ | ⌛ | ⌛ | -| [NonThreadSafeSingleton](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#nonthreadsafesingleton) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [UnsynchronizedStaticDateFormatter](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#unsynchronizedstaticdateformatter) | pmd-java | 3.6 | ❌ | ⌛ | ⌛ | -| [UnsynchronizedStaticFormatter](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#unsynchronizedstaticformatter) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [UseConcurrentHashMap](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#unsynchronizedstaticformatter) | pmd-java | 4.2.6 | ❌ | ⌛ | ⌛ | -| [UseNotifyAllInsteadOfNotify](https://pmd.github.io/latest/pmd_rules_java_multithreading.html#usenotifyallinsteadofnotify) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [CommentContent](https://pmd.github.io/latest/pmd_rules_java_documentation.html#ntcontent) | pmd-java | 5.0 | ❌ | ⌛ | ⌛ | -| [CommentRequired](https://pmd.github.io/latest/pmd_rules_java_documentation.html#commentrequired) | pmd-java | 5.1 | 🌵 | ⌛ | ⌛ | -| [UncommentedEmptyConstructor](https://pmd.github.io/latest/pmd_rules_java_documentation.html#uncommentedemptyconstructor) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [UncommentedEmptyMethodBody](https://pmd.github.io/latest/pmd_rules_java_documentation.html#uncommentedemptymethodbody) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [AbstractClassWithoutAnyMethod](https://pmd.github.io/latest/pmd_rules_java_design.html#abstractclasswithoutanymethod) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [AvoidCatchingGenericException](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidcatchinggenericexception) | pmd-java | 4.2.6 | ❌ | ⌛ | ⌛ | -| [AvoidDeeplyNestedIfStmts](https://pmd.github.io/latest/pmd_rules_java_design.html#avoiddeeplynestedifstmts) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [AvoidRethrowingException](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidrethrowingexception) | pmd-java | 3.8 | ✅ | ⌛ | ⌛ | -| [AvoidThrowingNewInstanceOfSameException](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidthrowingnewinstanceofsameexception) | pmd-java | 4.2.5 | ✅ | ⌛ | ⌛ | -| [AvoidThrowingNullPointerException](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidthrowingnullpointerexception) | pmd-java | 1.8 | ✅ | ⌛ | ⌛ | -| [AvoidThrowingRawExceptionTypes](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidthrowingrawexceptiontypes) | pmd-java | 1.8 | ✅ | ⌛ | ⌛ | -| [AvoidUncheckedExceptionsInSignatures](https://pmd.github.io/latest/pmd_rules_java_design.html#avoiduncheckedexceptionsinsignatures) | pmd-java | 6.13.0 | ✅ | ⌛ | ⌛ | -| [ClassWithOnlyPrivateConstructorsShouldBeFinal](https://pmd.github.io/latest/pmd_rules_java_design.html#classwithonlyprivateconstructorsshouldbefinal) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [CollapsibleIfStatements](https://pmd.github.io/latest/pmd_rules_java_design.html#collapsibleifstatements) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [CouplingBetweenObjects](https://pmd.github.io/latest/pmd_rules_java_design.html#couplingbetweenobjects) | pmd-java | 1.0.4 | 🌵 | ⌛ | ⌛ | -| [CognitiveComplexity](https://pmd.github.io/latest/pmd_rules_java_design.html#cognitivecomplexity) | pmd-java | 6.35.0 | ✅ | ⌛ | ⌛ | -| [CyclomaticComplexity](https://pmd.github.io/latest/pmd_rules_java_design.html#cyclomaticcomplexity) | pmd-java | 1.03 | ✅ | ⌛ | ⌛ | -| [DataClass](https://pmd.github.io/latest/pmd_rules_java_design.html#dataclass) | pmd-java | 6.0.0 | ✅ | ⌛ | ⌛ | -| [DoNotExtendJavaLangError](https://pmd.github.io/latest/pmd_rules_java_design.html#donotextendjavalangerror) | pmd-java | 4.0 | ✅ | ⌛ | ⌛ | -| [ExceptionAsFlowControl](https://pmd.github.io/latest/pmd_rules_java_design.html#exceptionasflowcontrol) | pmd-java | 1.8 | ✅ | ⌛ | ⌛ | -| [ExcessiveClassLength](https://pmd.github.io/latest/pmd_rules_java_design.html#excessiveclasslength) | pmd-java | 0.6 | ✅ | ⌛ | ⌛ | -| [ExcessiveImports](https://pmd.github.io/latest/pmd_rules_java_design.html#excessiveimports) | pmd-java | 1.04 | ✅ | ⌛ | ⌛ | -| [ExcessiveMethodLength](https://pmd.github.io/latest/pmd_rules_java_design.html#excessivemethodlength) | pmd-java | 0.6 | ✅ | ⌛ | ⌛ | -| [ExcessiveParameterList](https://pmd.github.io/latest/pmd_rules_java_design.html#excessiveparameterlist) | pmd-java | 0.9 | ✅ | ⌛ | ⌛ | -| [ExcessivePublicCount](https://pmd.github.io/latest/pmd_rules_java_design.html#excessivepubliccount) | pmd-java | 1.04 | ✅ | ⌛ | ⌛ | -| [FinalFieldCouldBeStatic](https://pmd.github.io/latest/pmd_rules_java_design.html#finalfieldcouldbestatic) | pmd-java | 1.1 | ✅ | ⌛ | ⌛ | -| [GodClass](https://pmd.github.io/latest/pmd_rules_java_design.html#godclass) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [ImmutableField](https://pmd.github.io/latest/pmd_rules_java_design.html#immutablefield) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [LawOfDemeter](https://pmd.github.io/latest/pmd_rules_java_design.html#lawofdemeter) | pmd-java | 5.0 | ❌ | ⌛ | ⌛ | -| [LogicInversion](https://pmd.github.io/latest/pmd_rules_java_design.html#logicinversion) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [LoosePackageCoupling](https://pmd.github.io/latest/pmd_rules_java_design.html#loosepackagecoupling) | pmd-java | 5.0 | ❌ | ⌛ | ⌛ | -| [ModifiedCyclomaticComplexity](https://pmd.github.io/latest/pmd_rules_java_design.html#modifiedcyclomaticcomplexity) | pmd-java | 5.1.2 | ✅ | ⌛ | ⌛ | -| [NcssConstructorCount](https://pmd.github.io/latest/pmd_rules_java_design.html#ncssconstructorcount) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [NcssCount](https://pmd.github.io/latest/pmd_rules_java_design.html#ncsscount) | pmd-java | 6.0.0 | ✅ | ⌛ | ⌛ | -| [NcssMethodCount](https://pmd.github.io/latest/pmd_rules_java_design.html#ncssmethodcount) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [NcssTypeCount](https://pmd.github.io/latest/pmd_rules_java_design.html#ncsstypecount) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [NPathComplexity](https://pmd.github.io/latest/pmd_rules_java_design.html#npathcomplexity) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [SignatureDeclareThrowsException](https://pmd.github.io/latest/pmd_rules_java_design.html#signaturedeclarethrowsexception) | pmd-java | 1.2 | ❌ | ⌛ | ⌛ | -| [SimplifiedTernary](https://pmd.github.io/latest/pmd_rules_java_design.html#simplifiedternary) | pmd-java | 5.4.0 | ✅ | ⌛ | ⌛ | -| [SimplifyBooleanAssertion](https://pmd.github.io/latest/pmd_rules_java_design.html#simplifybooleanassertion) | pmd-java | 3.6 | ✅ | ⌛ | ⌛ | -| [SimplifyBooleanExpressions](https://pmd.github.io/latest/pmd_rules_java_design.html#simplifybooleanexpressions) | pmd-java | 1.05 | ✅ | ⌛ | ⌛ | -| [SimplifyBooleanReturns](https://pmd.github.io/latest/pmd_rules_java_design.html#simplifybooleanreturns) | pmd-java | 0.9 | ✅ | ⌛ | ⌛ | -| [SimplifyConditional](https://pmd.github.io/latest/pmd_rules_java_design.html#simplifyconditional) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [SingularField](https://pmd.github.io/latest/pmd_rules_java_design.html#singularfield) | pmd-java | 3.1 | ✅ | ⌛ | ⌛ | -| [StdCyclomaticComplexity](https://pmd.github.io/latest/pmd_rules_java_design.html#singularfield) | pmd-java | 5.1.2 | ❌ | ⌛ | ⌛ | -| [SwitchDensity](https://pmd.github.io/latest/pmd_rules_java_design.html#switchdensity) | pmd-java | 1.02 | ✅ | ⌛ | ⌛ | -| [TooManyFields](https://pmd.github.io/latest/pmd_rules_java_design.html#toomanyfields) | pmd-java | 3.0 | 🌵 | ⌛ | ⌛ | -| [TooManyMethods](https://pmd.github.io/latest/pmd_rules_java_design.html#toomanymethods) | pmd-java | 4.2 | 🌵 | ⌛ | ⌛ | -| [UselessOverridingMethod](https://pmd.github.io/latest/pmd_rules_java_design.html#uselessoverridingmethod) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [UseObjectForClearerAPI](https://pmd.github.io/latest/pmd_rules_java_design.html#useobjectforclearerapi) | pmd-java | 4.2.6 | ❌ | ⌛ | ⌛ | -| [UseUtilityClass](https://pmd.github.io/latest/pmd_rules_java_design.html#useutilityclass) | pmd-java | 0.3 | ✅ | ⌛ | ⌛ | -| [MutableStaticState](https://pmd.github.io/latest/pmd_rules_java_design.html#mutablestaticstate) | pmd-java | 6.35.0 | ✅ | ⌛ | ⌛ | -| [AssignmentInOperand](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#assignmentinoperand) | pmd-java | 1.03 | ✅ | ⌛ | ⌛ | -| [AssignmentToNonFinalStatic](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#assignmenttononfinalstatic) | pmd-java | 2.2 | ✅ | ⌛ | ⌛ | -| [AvoidAccessibilityAlteration](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidaccessibilityalteration) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [AvoidAssertAsIdentifier](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidassertasidentifier) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [AvoidBranchingStatementAsLastInLoop](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidbranchingstatementaslastinloop) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [AvoidCallingFinalize](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidcallingfinalize) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AvoidCatchingNPE](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidcatchingnpe) | pmd-java | 1.8 | ✅ | ⌛ | ⌛ | -| [AvoidCatchingThrowable](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidcatchingthrowable) | pmd-java | 1.2 | ✅ | ⌛ | ⌛ | -| [AvoidDecimalLiteralsInBigDecimalConstructor](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoiddecimalliteralsinbigdecimalconstructor) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [AvoidDuplicateLiterals](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidduplicateliterals) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [AvoidEnumAsIdentifier](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidenumasidentifier) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [AvoidFieldNameMatchingMethodName](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidfieldnamematchingmethodname) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AvoidFieldNameMatchingTypeName](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidfieldnamematchingtypename) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AvoidInstanceofChecksInCatchClause](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidinstanceofchecksincatchclause) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [AvoidLiteralsInIfCondition](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidliteralsinifcondition) | pmd-java | 4.2.6 | ✅ | ⌛ | ⌛ | -| [AvoidLosingExceptionInformation](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidlosingexceptioninformation) | pmd-java | 4.2.6 | ✅ | ⌛ | ⌛ | -| [AvoidMultipleUnaryOperators](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidmultipleunaryoperators) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [AvoidUsingOctalValues](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#avoidusingoctalvalues) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [BadComparison](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#badcomparison) | pmd-java | 6.36.0 | ❌ | ⌛ | ⌛ | -| [BeanMembersShouldSerialize](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#beanmembersshouldserialize) | pmd-java | 1.1 | ✅ | ⌛ | ⌛ | -| [BrokenNullCheck](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#brokennullcheck) | pmd-java | 3.8 | ✅ | ⌛ | ⌛ | -| [CallSuperFirst](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#callsuperfirst) | pmd-java | 4.2.5 | ✅ | ⌛ | ⌛ | -| [CallSuperLast](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#callsuperlast) | pmd-java | 4.2.5 | ✅ | ⌛ | ⌛ | -| [CheckSkipResult](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#checkskipresult) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [ClassCastExceptionWithToArray](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#classcastexceptionwithtoarray) | pmd-java | 3.4 | ✅ | ⌛ | ⌛ | -| [CloneMethodMustBePublic](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#clonemethodmustbepublic) | pmd-java | 5.4.0 | ✅ | ⌛ | ⌛ | -| [CloneMethodMustImplementCloneable](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#clonemethodmustimplementcloneable) | pmd-java | 1.9 | ✅ | ⌛ | ⌛ | -| [CloneMethodReturnTypeMustMatchClassName](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#clonemethodreturntypemustmatchclassname) | pmd-java | 5.4.0 | ✅ | ⌛ | ⌛ | -| [CloneThrowsCloneNotSupportedException](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#clonethrowsclonenotsupportedexception) | pmd-java | 1.9 | ✅ | ⌛ | ⌛ | -| [CloseResource](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#closeresource) | pmd-java | 1.2.2 | ✅ | ⌛ | ⌛ | -| [CompareObjectsWithEquals](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#compareobjectswithequals) | pmd-java | 3.2 | ✅ | ⌛ | ⌛ | -| [ComparisonWithNaN](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#comparisonwithnan) | pmd-java | 6.36.0 | ✅ | ⌛ | ⌛ | -| [ConstructorCallsOverridableMethod](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#constructorcallsoverridablemethod) | pmd-java | 1.04 | ✅ | ⌛ | ⌛ | -| [DataflowAnomalyAnalysis](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#dataflowanomalyanalysis) | pmd-java | 3.9 | ❌ | ⌛ | ⌛ | -| [DetachedTestCase](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#detachedtestcase) | pmd-java | 6.13.0 | ✅ | ⌛ | ⌛ | -| [DoNotCallGarbageCollectionExplicitly](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donotcallgarbagecollectionexplicitly) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [DoNotCallSystemExit](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donotcallsystemexit) | pmd-java | 4.1 | ❌ | ⌛ | ⌛ | -| [DoNotExtendJavaLangThrowable](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donotextendjavalangthrowable) | pmd-java | 6.0.0 | ✅ | ⌛ | ⌛ | -| [DoNotHardCodeSDCard](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donothardcodesdcard) | pmd-java | 4.2.6 | ✅ | ⌛ | ⌛ | -| [DoNotTerminateVM](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donotterminatevm) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [DoNotThrowExceptionInFinally](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#donotthrowexceptioninfinally) | pmd-java | 4.2 | ✅ | ⌛ | ⌛ | -| [DontImportSun](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#dontimportsun) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [DontUseFloatTypeForLoopIndices](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#dontusefloattypeforloopindices) | pmd-java | 4.3 | ✅ | ⌛ | ⌛ | -| [EmptyCatchBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptycatchblock) | pmd-java | 0.1 | ✅ | ⌛ | ⌛ | -| [EmptyFinalizer](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptyfinalizer) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [EmptyFinallyBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptyfinallyblock) | pmd-java | 0.4 | ✅ | ⌛ | ⌛ | -| [EmptyIfStmt](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptyifstmt) | pmd-java | 0.1 | ✅ | ⌛ | ⌛ | -| [EmptyInitializer](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptyinitializer) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [EmptyStatementBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptystatementblock) | pmd-java | 5.0 | ✅ | ⌛ | ⌛ | -| [EmptyStatementNotInLoop](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptystatementnotinloop) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [EmptySwitchStatements](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptyswitchstatements) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [EmptySynchronizedBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptysynchronizedblock) | pmd-java | 1.3 | ✅ | ⌛ | ⌛ | -| [EmptyTryBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptytryblock) | pmd-java | 0.4 | ✅ | ⌛ | ⌛ | -| [EmptyWhileStmt](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#emptywhilestmt) | pmd-java | 0.2 | ✅ | ⌛ | ⌛ | -| [EqualsNull](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#equalsnull) | pmd-java | 1.9 | ✅ | ⌛ | ⌛ | -| [FinalizeDoesNotCallSuperFinalize](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#finalizedoesnotcallsuperfinalize) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [FinalizeOnlyCallsSuperFinalize](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#finalizeonlycallssuperfinalize) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [FinalizeOverloaded](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#finalizeoverloaded) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [FinalizeShouldBeProtected](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#finalizeshouldbeprotected) | pmd-java | 1.1 | ✅ | ⌛ | ⌛ | -| [IdempotentOperations](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#idempotentoperations) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [ImplicitSwitchFallThrough](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#implicitswitchfallthrough) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [ImportFromSamePackage](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#importfromsamepackage) | pmd-java | 1.02 | ❌ | ⌛ | ⌛ | -| [InstantiationToGetClass](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#instantiationtogetclass) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [InvalidLogMessageFormat](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#invalidlogmessageformat) | pmd-java | 5.5.0 | ✅ | ⌛ | ⌛ | -| [InvalidSlf4jMessageFormat](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#invalidslf4jmessageformat) | pmd-java | 5.5.0 | ❌ | ⌛ | ⌛ | -| [JumbledIncrementer](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#jumbledincrementer) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [JUnitSpelling](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#junitspelling) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [JUnitStaticSuite](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#junitstaticsuite) | pmd-java | 1.0 | ✅ | ⌛ | ⌛ | -| [LoggerIsNotStaticFinal](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#loggerisnotstaticfinal) | pmd-java | 2.0 | ❌ | ⌛ | ⌛ | -| [MethodWithSameNameAsEnclosingClass](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#methodwithsamenameasenclosingclass) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [MisplacedNullCheck](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#misplacednullcheck) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [MissingBreakInSwitch](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#missingbreakinswitch) | pmd-java | 3.0 | ❌ | ⌛ | ⌛ | -| [MissingSerialVersionUID](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#missingserialversionuid) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [MissingStaticMethodInNonInstantiatableClass](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [MoreThanOneLogger](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#morethanonelogger) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [NonCaseLabelInSwitchStatement](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#noncaselabelinswitchstatement) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [NonStaticInitializer](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#nonstaticinitializer) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [NullAssignment](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#nullassignment) | pmd-java | 1.02 | ✅ | ⌛ | ⌛ | -| [OverrideBothEqualsAndHashcode](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#overridebothequalsandhashcode) | pmd-java | 0.4 | ✅ | ⌛ | ⌛ | -| [ProperCloneImplementation](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#propercloneimplementation) | pmd-java | 1.4 | ✅ | ⌛ | ⌛ | -| [ProperLogger](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#properlogger) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [ReturnEmptyArrayRatherThanNull](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#returnemptyarrayratherthannull) | pmd-java | 4.2 | ❌ | ⌛ | ⌛ | -| [ReturnEmptyCollectionRatherThanNull](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#returnemptycollectionratherthannull) | pmd-java | 6.37.0 | ✅ | ⌛ | ⌛ | -| [ReturnFromFinallyBlock](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#returnfromfinallyblock) | pmd-java | 1.05 | ✅ | ⌛ | ⌛ | -| [SimpleDateFormatNeedsLocale](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#simpledateformatneedslocale) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [SingleMethodSingleton](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#singlemethodsingleton) | pmd-java | 5.4 | ✅ | ⌛ | ⌛ | -| [SingletonClassReturningNewInstance](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#singletonclassreturningnewinstance) | pmd-java | 5.4 | ✅ | ⌛ | ⌛ | -| [StaticEJBFieldShouldBeFinal](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#staticejbfieldshouldbefinal) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [StringBufferInstantiationWithChar](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#stringbufferinstantiationwithchar) | pmd-java | 3.9 | ✅ | ⌛ | ⌛ | -| [SuspiciousEqualsMethodName](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#suspiciousequalsmethodname) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [SuspiciousHashcodeMethodName](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#suspicioushashcodemethodname) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [SuspiciousOctalEscape](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#suspiciousoctalescape) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [TestClassWithoutTestCases](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#testclasswithouttestcases) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [UnconditionalIfStatement](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#unconditionalifstatement) | pmd-java | 1.5 | ✅ | ⌛ | ⌛ | -| [UnnecessaryBooleanAssertion](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#unnecessarybooleanassertion) | pmd-java | 3.0 | ✅ | ⌛ | ⌛ | -| [UnnecessaryCaseChange](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#unnecessarycasechange) | pmd-java | 3.3 | ✅ | ⌛ | ⌛ | -| [UnnecessaryConversionTemporary](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#unnecessaryconversiontemporary) | pmd-java | 0.1 | ✅ | ⌛ | ⌛ | -| [UnusedNullCheckInEquals](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#unusednullcheckinequals) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [UseCorrectExceptionLogging](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#usecorrectexceptionlogging) | pmd-java | 3.2 | ✅ | ⌛ | ⌛ | -| [UseEqualsToCompareStrings](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#useequalstocomparestrings) | pmd-java | 4.1 | ✅ | ⌛ | ⌛ | -| [UselessOperationOnImmutable](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#uselessoperationonimmutable) | pmd-java | 3.5 | ✅ | ⌛ | ⌛ | -| [UseLocaleWithCaseConversions](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#uselocalewithcaseconversions) | pmd-java | 2.0 | ✅ | ⌛ | ⌛ | -| [UseProperClassLoader](https://pmd.github.io/latest/pmd_rules_java_errorprone.html#useproperclassloader) | pmd-java | 3.7 | ✅ | ⌛ | ⌛ | -| [HardCodedCryptoKey](https://pmd.github.io/latest/pmd_rules_java_security.html#hardcodedcryptokey) | pmd-java | 6.4.0 | ✅ | ⌛ | ⌛ | -| [InsecureCryptoIv](https://pmd.github.io/latest/pmd_rules_java_security.html#insecurecryptoiv) | pmd-java | 6.3.0 | ✅ | ⌛ | ⌛ | +⌛ - planned for review considering framework(s) architecture, ✅ - included +in `arch4u-ruleset.xml`, 🌵 - temporary disabled or reconfigured in `arch4u-ruleset.xml`, ❌ - +disabled/not planned in `arch4u-ruleset.xml` + +| PMD rule | Provider | Status | Spring | Quarkus | +|:------------------------------------------------------------------------------------------------------------------------------------------|:------------------:|:------:|:------:|:-------:| +| [UseExistingMediaTypeConstant](https://github.com/dgroup/arch4u-pmd/discussions/43) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [UseOpenApiInRestEndpoints](https://github.com/dgroup/arch4u-pmd/discussions/73) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [RestEndpointsWithoutExposedMetrics](https://github.com/dgroup/arch4u-pmd/discussions/74) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [UseConstantAsMetricName](https://github.com/dgroup/arch4u-pmd/discussions/75) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [NoMandatoryConstructorInExceptionClass](https://github.com/dgroup/arch4u-pmd/discussions/31) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [AvoidUsingObjectMapperAsALocalVariable](https://github.com/dgroup/arch4u-pmd/discussions/30) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [AvoidMdcOutsideTryStatement](https://github.com/dgroup/arch4u-pmd/discussions/86) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [PotentiallyThreadLocalPollutionByMdc](https://github.com/dgroup/arch4u-pmd/discussions/88) | `arch4u-pmd:0.1.0` | ✅ | ✅ | ⌛ | +| [GuardLogStatement](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#guardlogstatement) | `pmd-java:6.42.0` | ❌ | ⌛ | ⌛ | +| [JUnitAssertionsShouldIncludeMessage](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#junitassertionsshouldincludemessage) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [UnusedPrivateMethod](https://pmd.github.io/latest/pmd_rules_java_bestpractices.html#unusedprivatemethod) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [AtLeastOneConstructor](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#atleastoneconstructor) | `pmd-java:6.42.0` | 🌵 | ✅ | ⌛ | +| [OnlyOneReturn](https://pmd.github.io/latest/pmd_rules_java_codestyle.html#onlyonereturn) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [CommentRequired](https://pmd.github.io/latest/pmd_rules_java_documentation.html#commentrequired) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [AvoidCatchingGenericException](https://pmd.github.io/latest/pmd_rules_java_design.html#avoidcatchinggenericexception) | `pmd-java:6.42.0` | ⌛ | ⌛ | ⌛ | +| [CouplingBetweenObjects](https://pmd.github.io/latest/pmd_rules_java_design.html#couplingbetweenobjects) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [LawOfDemeter](https://pmd.github.io/latest/pmd_rules_java_design.html#lawofdemeter) | `pmd-java:6.42.0` | ❌ | ⌛ | ⌛ | +| [LoosePackageCoupling](https://pmd.github.io/latest/pmd_rules_java_design.html#loosepackagecoupling) | `pmd-java:6.42.0` | ⌛ | ⌛ | ⌛ | +| [SignatureDeclareThrowsException](https://pmd.github.io/latest/pmd_rules_java_design.html#signaturedeclarethrowsexception) | `pmd-java:6.42.0` | ⌛ | ⌛ | ⌛ | +| [TooManyFields](https://pmd.github.io/latest/pmd_rules_java_design.html#toomanyfields) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [TooManyMethods](https://pmd.github.io/latest/pmd_rules_java_design.html#toomanymethods) | `pmd-java:6.42.0` | 🌵 | ⌛ | ⌛ | +| [UseObjectForClearerAPI](https://pmd.github.io/latest/pmd_rules_java_design.html#useobjectforclearerapi) | `pmd-java:6.42.0` | ❌ | ⌛ | ⌛ | ### How to use? + #### Maven (pom.xml) + ```xml ... - - - ... - - org.apache.maven.plugins - maven-pmd-plugin - 3.15.0 - - - test - - check - - - - - true - - ... - io/github/dgroup/arch4u/pmd/arch4u-ruleset.xml - ... - - - target/generated-sources/ - - - - - - io.github.dgroup - arch4u-pmd - ${version} - - - - ... - - - ... + + + ... + + org.apache.maven.plugins + maven-pmd-plugin + 3.15.0 + + + test + + check + + + + + true + + ... + io/github/dgroup/arch4u/pmd/arch4u-ruleset.xml + ... + + + target/generated-sources/ + + + + + + io.github.dgroup + arch4u-pmd + ${version} + + + + ... + + + ... ``` + #### Gradle (build.gradle) + ```groovy apply plugin: 'pmd' - - dependencies { - ... - pmd "io.github.dgroup:arch4u-pmd:${version}" // use latest arch4u-pmd rules version - pmd "commons-io:commons-io:2.11.0" // required dependency by pmd engine - ... - } - - pmd { - consoleOutput = true - ruleSetFiles = files("io/github/dgroup/arch4u/pmd/arch4u-ruleset.xml") - ruleSets = [] // Keep it as is, workaround for pmd - } + +dependencies { + ... + pmd "io.github.dgroup:arch4u-pmd:${version}" // use latest arch4u-pmd rules version + pmd "commons-io:commons-io:2.11.0" // required dependency by pmd engine + ... +} + +pmd { + consoleOutput = true + ruleSetFiles = files("io/github/dgroup/arch4u/pmd/arch4u-ruleset.xml") + ruleSets = [] // Keep it as is, workaround for pmd +} ``` + #### Include arch4u-pmd rules into your existing custom ruleset -0. Don't forget to add rules to classpath in Maven/Gradle pmd plugin (see lines above) -1. Let's assume that you already have pmd rules defined in `your-pmd-ruleset.xml` + +0. Don't forget to add rules to classpath in Maven/Gradle pmd plugin (see lines above) +1. Let's assume that you already have pmd rules defined in `your-pmd-ruleset.xml` 2. Add line `` to `your-pmd-ruleset.xml` ```xml @@ -448,25 +148,29 @@ We are using the latest stable pmd-java version which is `6.42.0` as a start poi ``` + #### Exclude particular rule + ```xml ... - + ... ``` + #### Reconfigure a rule + ```xml ... - + - + ... ``` @@ -504,10 +208,11 @@ We are using the latest stable pmd-java version which is `6.42.0` as a start poi ${version} ``` -4. Download pmd rule designer - https://pmd.github.io/latest/pmd_userdocs_extending_designer_reference.html +4. Download pmd rule designer + - https://pmd.github.io/latest/pmd_userdocs_extending_designer_reference.html ### Contributors -* [dgroup](https://github.com/dgroup) as Yurii Dubinka () -* [dykov](https://github.com/dykov) as Oleksii Dykov () -* [smithros](https://github.com/smithros) as Rostyslav Koval () +* [dgroup](https://github.com/dgroup) as Yurii Dubinka () +* [dykov](https://github.com/dykov) as Oleksii Dykov () +* [smithros](https://github.com/smithros) as Rostyslav Koval () diff --git a/src/main/resources/io/github/dgroup/arch4u/pmd/thirdparty/arch4u-recommended-third-party-ruleset.xml b/src/main/resources/io/github/dgroup/arch4u/pmd/thirdparty/arch4u-recommended-third-party-ruleset.xml index 524aa14..bf88f84 100644 --- a/src/main/resources/io/github/dgroup/arch4u/pmd/thirdparty/arch4u-recommended-third-party-ruleset.xml +++ b/src/main/resources/io/github/dgroup/arch4u/pmd/thirdparty/arch4u-recommended-third-party-ruleset.xml @@ -94,26 +94,11 @@ - - - - - - - - - - - + - - - - -