|
| 1 | +--- |
| 2 | +layout:post |
| 3 | +title:PMD 7.8.0 released |
| 4 | +--- |
| 5 | + |
| 6 | +##29-November-2024 - 7.8.0 |
| 7 | + |
| 8 | +The PMD team is pleased to announce PMD 7.8.0. |
| 9 | + |
| 10 | +This is a minor release. |
| 11 | + |
| 12 | +###Table Of Contents |
| 13 | + |
| 14 | +*[🚀 New and noteworthy](#new-and-noteworthy) |
| 15 | +*[🌟 New and changed rules](#new-and-changed-rules) |
| 16 | +*[New Rules](#new-rules) |
| 17 | +*[🐛 Fixed Issues](#fixed-issues) |
| 18 | +*[🚨 API Changes](#api-changes) |
| 19 | +*[Deprecations](#deprecations) |
| 20 | +*[✨ Merged pull requests](#merged-pull-requests) |
| 21 | +*[📦 Dependency updates](#dependency-updates) |
| 22 | +*[📈 Stats](#stats) |
| 23 | + |
| 24 | +###🚀 New and noteworthy |
| 25 | + |
| 26 | +###🌟 New and changed rules |
| 27 | + |
| 28 | +####New Rules |
| 29 | +* The new Apex rule[`QueueableWithoutFinalizer`](https://docs.pmd-code.org/pmd-doc-7.8.0/pmd_rules_apex_bestpractices.html#queueablewithoutfinalizer) detects when the Queueable interface |
| 30 | + is used but a Finalizer is not attached. Without attaching a Finalizer, there is no way of designing error |
| 31 | + recovery actions should the Queueable action fail. |
| 32 | + |
| 33 | +###🐛 Fixed Issues |
| 34 | +* ant |
| 35 | +*[#1860](https://github.com/pmd/pmd/issues/1860):\[ant] Reflective access warnings on java > 9 and java < 17 |
| 36 | +* apex |
| 37 | +*[#5302](https://github.com/pmd/pmd/issues/5302):\[apex] New Rule: Queueable Should Attach Finalizer |
| 38 | +*[#5333](https://github.com/pmd/pmd/issues/5333):\[apex] Token recognition errors for string containing unicode escape sequence |
| 39 | +* html |
| 40 | +*[#5322](https://github.com/pmd/pmd/issues/5322):\[html] CPD throws exception on when HTML file is missing closing tag |
| 41 | +* java |
| 42 | +*[#5283](https://github.com/pmd/pmd/issues/5283):\[java] AssertionError "this should be unreachable" with scala library |
| 43 | +*[#5293](https://github.com/pmd/pmd/issues/5293):\[java] Deadlock when executing PMD in multiple threads |
| 44 | +*[#5324](https://github.com/pmd/pmd/issues/5324):\[java] Issue with type inference of nested lambdas |
| 45 | +*[#5329](https://github.com/pmd/pmd/issues/5329):\[java] Type inference issue with unknown method ref in call chain |
| 46 | +*[#5338](https://github.com/pmd/pmd/issues/5338):\[java] Unresolved target type for lambdas make overload resolution fail |
| 47 | +* java-bestpractices |
| 48 | +*[#4113](https://github.com/pmd/pmd/issues/4113):\[java] JUnitTestsShouldIncludeAssert - false positive with SoftAssertionsExtension |
| 49 | +*[#5083](https://github.com/pmd/pmd/issues/5083):\[java] UnusedPrivateMethod false positive when method reference has no target type |
| 50 | +*[#5097](https://github.com/pmd/pmd/issues/5097):\[java] UnusedPrivateMethod FP with raw type missing from the classpath |
| 51 | +*[#5318](https://github.com/pmd/pmd/issues/5318):\[java] PreserveStackTraceRule: false-positive on Pattern Matching with instanceof |
| 52 | +* java-codestyle |
| 53 | +*[#5214](https://github.com/pmd/pmd/issues/5214):\[java] Wrong message for LambdaCanBeMethodReference with method of enclosing class |
| 54 | +*[#5263](https://github.com/pmd/pmd/issues/5263):\[java] UnnecessaryFullyQualifiedName: false-positive in an enum that uses its own static variables |
| 55 | +*[#5315](https://github.com/pmd/pmd/issues/5315):\[java] UnnecessaryImport false positive for on-demand imports |
| 56 | +* java-design |
| 57 | +*[#4763](https://github.com/pmd/pmd/issues/4763):\[java] SimplifyBooleanReturns - wrong suggested solution |
| 58 | +* java-errorprone |
| 59 | +*[#5070](https://github.com/pmd/pmd/issues/5070):\[java] ConfusingArgumentToVarargsMethod FP when types are unresolved |
| 60 | +* java-performance |
| 61 | +*[#5287](https://github.com/pmd/pmd/issues/5287):\[java] TooFewBranchesForSwitch false-positive with switch using list of case constants |
| 62 | +*[#5314](https://github.com/pmd/pmd/issues/5314):\[java] InsufficientStringBufferDeclarationRule: Lack of handling for char type parameters |
| 63 | +*[#5320](https://github.com/pmd/pmd/issues/5320):\[java] UseStringBufferLength: false-negative on StringBuffer of sb.toString().equals("") |
| 64 | + |
| 65 | +###🚨 API Changes |
| 66 | + |
| 67 | +####Deprecations |
| 68 | +* pmd-coco |
| 69 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-coco/7.8.0/net/sourceforge/pmd/lang/coco/ast/CocoBaseListener.html#"><code>CocoBaseListener</code></a> is deprecated for removal. This class was never intended |
| 70 | + to be generated. It will be removed with no replacement. |
| 71 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-coco/7.8.0/net/sourceforge/pmd/lang/coco/ast/CocoBaseVisitor.html#"><code>CocoBaseVisitor</code></a> is deprecated for removal. This class was never intended |
| 72 | + to be generated. It will be removed with no replacement. |
| 73 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-coco/7.8.0/net/sourceforge/pmd/lang/coco/ast/CocoListener.html#"><code>CocoListener</code></a> is deprecated for removal. This class was never intended |
| 74 | + to be generated. It will be removed with no replacement. |
| 75 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-coco/7.8.0/net/sourceforge/pmd/lang/coco/ast/CocoParser.html#"><code>CocoParser</code></a> is deprecated for removal. This class was never intended |
| 76 | + to be generated. It will be removed with no replacement. |
| 77 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-coco/7.8.0/net/sourceforge/pmd/lang/coco/ast/CocoVisitor.html#"><code>CocoVisitor</code></a> is deprecated for removal. This class was never intended |
| 78 | + to be generated. It will be removed with no replacement. |
| 79 | +* pmd-gherkin |
| 80 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-gherkin/7.8.0/net/sourceforge/pmd/lang/gherkin/ast/GherkinBaseListener.html#"><code>GherkinBaseListener</code></a> is deprecated for removal. This class was never intended |
| 81 | + to be generated. It will be removed with no replacement. |
| 82 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-gherkin/7.8.0/net/sourceforge/pmd/lang/gherkin/ast/GherkinBaseVisitor.html#"><code>GherkinBaseVisitor</code></a> is deprecated for removal. This class was never intended |
| 83 | + to be generated. It will be removed with no replacement. |
| 84 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-gherkin/7.8.0/net/sourceforge/pmd/lang/gherkin/ast/GherkinListener.html#"><code>GherkinListener</code></a> is deprecated for removal. This class was never intended |
| 85 | + to be generated. It will be removed with no replacement. |
| 86 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-gherkin/7.8.0/net/sourceforge/pmd/lang/gherkin/ast/GherkinParser.html#"><code>GherkinParser</code></a> is deprecated for removal. This class was never intended |
| 87 | + to be generated. It will be removed with no replacement. |
| 88 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-gherkin/7.8.0/net/sourceforge/pmd/lang/gherkin/ast/GherkinVisitor.html#"><code>GherkinVisitor</code></a> is deprecated for removal. This class was never intended |
| 89 | + to be generated. It will be removed with no replacement. |
| 90 | +* pmd-julia |
| 91 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-julia/7.8.0/net/sourceforge/pmd/lang/julia/ast/JuliaBaseListener.html#"><code>JuliaBaseListener</code></a> is deprecated for removal. This class was never intended to |
| 92 | + be generated. It will be removed with no replacement. |
| 93 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-julia/7.8.0/net/sourceforge/pmd/lang/julia/ast/JuliaBaseVisitor.html#"><code>JuliaBaseVisitor</code></a> is deprecated for removal. This class was never intended to |
| 94 | + be generated. It will be removed with no replacement. |
| 95 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-julia/7.8.0/net/sourceforge/pmd/lang/julia/ast/JuliaListener.html#"><code>JuliaListener</code></a> is deprecated for removal. This class was never intended to |
| 96 | + be generated. It will be removed with no replacement. |
| 97 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-julia/7.8.0/net/sourceforge/pmd/lang/julia/ast/JuliaParser.html#"><code>JuliaParser</code></a> is deprecated for removal. This class was never intended to |
| 98 | + be generated. It will be removed with no replacement. |
| 99 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-julia/7.8.0/net/sourceforge/pmd/lang/julia/ast/JuliaVisitor.html#"><code>JuliaVisitor</code></a> is deprecated for removal. This class was never intended to |
| 100 | + be generated. It will be removed with no replacement. |
| 101 | +* pmd-kotlin |
| 102 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-kotlin/7.8.0/net/sourceforge/pmd/lang/kotlin/ast/UnicodeClasses.html#"><code>UnicodeClasses</code></a> is deprecated for removal. This class was never intended to |
| 103 | + be generated. It will be removed with no replacement. |
| 104 | +* pmd-xml |
| 105 | +* <ahref="https://docs.pmd-code.org/apidocs/pmd-xml/7.8.0/net/sourceforge/pmd/lang/xml/antlr4/XMLLexer.html#"><code>XMLLexer</code></a> is deprecated for removal. Use <ahref="https://docs.pmd-code.org/apidocs/pmd-xml/7.8.0/net/sourceforge/pmd/lang/xml/ast/XMLLexer.html#"><code>net.sourceforge.pmd.lang.xml.ast.XMLLexer</code></a> |
| 106 | + instead (note different package`ast` instead of`antlr4`). |
| 107 | + |
| 108 | +###✨ Merged pull requests |
| 109 | +<!-- content will be automatically generated, see /do-release.sh--> |
| 110 | +*[#5240](https://github.com/pmd/pmd/pull/5240): Release notes improvements -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 111 | +*[#5284](https://github.com/pmd/pmd/pull/5284):\[apex] Use case-insensitive input stream to avoid choking on Unicode escape sequences -[Willem A. Hajenius](https://github.com/wahajenius) (@wahajenius) |
| 112 | +*[#5286](https://github.com/pmd/pmd/pull/5286):\[ant] Formatter: avoid reflective access to determine console encoding -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 113 | +*[#5289](https://github.com/pmd/pmd/pull/5289):\[java] TooFewBranchesForSwitch - allow list of case constants -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 114 | +*[#5296](https://github.com/pmd/pmd/pull/5296):\[xml] Have pmd-xml Lexer in line with other antlr grammars -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 115 | +*[#5300](https://github.com/pmd/pmd/pull/5300): Add rule test cases for issues fixed with PMD 7.0.0 -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 116 | +*[#5303](https://github.com/pmd/pmd/pull/5303):\[apex] New Rule: Queueable Should Attach Finalizer -[Mitch Spano](https://github.com/mitchspano) (@mitchspano) |
| 117 | +*[#5309](https://github.com/pmd/pmd/pull/5309):\[java] Fix#5293: Parse number of type parameters eagerly -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 118 | +*[#5310](https://github.com/pmd/pmd/pull/5310):\[java] Fix#5283 - inner class has public private modifiers -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 119 | +*[#5325](https://github.com/pmd/pmd/pull/5325):\[java] Fix inference dependency issue with nested lambdas -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 120 | +*[#5326](https://github.com/pmd/pmd/pull/5326):\[java] UseStringBufferLength - consider sb.toString().equals("") -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 121 | +*[#5328](https://github.com/pmd/pmd/pull/5328):\[html] Test for a closing tag when determining node positions -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 122 | +*[#5330](https://github.com/pmd/pmd/pull/5330):\[java] Propagate unknown type better when mref is unresolved -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 123 | +*[#5331](https://github.com/pmd/pmd/pull/5331):\[java] PreserveStackTrace - consider instance type patterns -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 124 | +*[#5332](https://github.com/pmd/pmd/pull/5332):\[java] InsufficientStringBufferDeclaration: Fix CCE for Character -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 125 | +*[#5334](https://github.com/pmd/pmd/pull/5334):\[java] UnitTestShouldIncludeAssert - consider SoftAssertionsExtension -[Andreas Dangel](https://github.com/adangel) (@adangel) |
| 126 | +*[#5335](https://github.com/pmd/pmd/pull/5335):\[kotlin] Prevent auxiliary grammars from generating lexers -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 127 | +*[#5336](https://github.com/pmd/pmd/pull/5336):\[gherkin] Remove generated gherkin code from coverage report -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 128 | +*[#5337](https://github.com/pmd/pmd/pull/5337):\[doc] Introducing PMD Guru on Gurubase.io -[Kursat Aktas](https://github.com/kursataktas) (@kursataktas) |
| 129 | +*[#5339](https://github.com/pmd/pmd/pull/5339):\[java] Allow lambdas with unresolved target types to succeed inference -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 130 | +*[#5340](https://github.com/pmd/pmd/pull/5340):\[java] Fix#5097 - problem with unchecked conversion -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 131 | +*[#5341](https://github.com/pmd/pmd/pull/5341):\[java] Fix#5083 - UnusedPrivateMethod false positive with mref without target type but with exact method -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 132 | +*[#5342](https://github.com/pmd/pmd/pull/5342):\[julia] Ignore generated code in Julia module -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 133 | +*[#5345](https://github.com/pmd/pmd/pull/5345):\[coco] Remove generated coco files form coverage -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 134 | +*[#5346](https://github.com/pmd/pmd/pull/5346):\[typescript] Add cleanup after generating ts lexer -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 135 | +*[#5347](https://github.com/pmd/pmd/pull/5347):\[tsql] Flag generated lexer as generated -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 136 | +*[#5352](https://github.com/pmd/pmd/pull/5352):\[java] Add permitted subtypes to symbol API -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 137 | +*[#5353](https://github.com/pmd/pmd/pull/5353):\[java] Fix#5263 - UnnecessaryFullyQualifiedName FP with forward references -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 138 | +*[#5354](https://github.com/pmd/pmd/pull/5354):\[apex] Updated the docs for UnusedMethod as per discussion#5200 -[samc-gearset](https://github.com/sam-gearset) (@sam-gearset) |
| 139 | +*[#5370](https://github.com/pmd/pmd/pull/5370):\[java] Fix#5214 - LambdaCanBeMethodReference issue with method of enclosing class -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 140 | +*[#5371](https://github.com/pmd/pmd/pull/5371):\[doc] Improve docs on adding Antlr languages -[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) |
| 141 | +*[#5372](https://github.com/pmd/pmd/pull/5372):\[java] Fix#5315 - UnusedImport FP with import on demand -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 142 | +*[#5373](https://github.com/pmd/pmd/pull/5373):\[java] Fix#4763 - wrong message for SimplifyBooleanReturns -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 143 | +*[#5374](https://github.com/pmd/pmd/pull/5374):\[java] Fix#5070 - confusing argument to varargs method FP when types are unknown -[Clément Fournier](https://github.com/oowekyala) (@oowekyala) |
| 144 | + |
| 145 | +###📦 Dependency updates |
| 146 | +<!-- content will be automatically generated, see /do-release.sh--> |
| 147 | +*[#5285](https://github.com/pmd/pmd/pull/5285): Bump pmd from 7.5.0 to 7.7.0 |
| 148 | +*[#5288](https://github.com/pmd/pmd/pull/5288): Bump asm from 9.7 to 9.7.1 |
| 149 | +*[#5290](https://github.com/pmd/pmd/pull/5290): Bump org.apache.maven.plugins:maven-assembly-plugin from 3.6.0 to 3.7.1 |
| 150 | +*[#5301](https://github.com/pmd/pmd/pull/5301): Bump gems and bundler |
| 151 | +*[#5307](https://github.com/pmd/pmd/pull/5307): Bump org.apache.maven.plugins:maven-clean-plugin from 3.3.2 to 3.4.0 |
| 152 | +*[#5308](https://github.com/pmd/pmd/pull/5308): Bump webrick from 1.8.2 to 1.9.0 in /docs in the all-gems group across 1 directory |
| 153 | +*[#5312](https://github.com/pmd/pmd/pull/5312): Bump maven-pmd-plugin from 3.24.0 to 3.26.0 |
| 154 | +*[#5316](https://github.com/pmd/pmd/pull/5316): Bump rouge from 4.4.0 to 4.5.0 in the all-gems group across 1 directory |
| 155 | +*[#5317](https://github.com/pmd/pmd/pull/5317): Bump org.apache.commons:commons-compress from 1.26.0 to 1.27.1 |
| 156 | +*[#5348](https://github.com/pmd/pmd/pull/5348): Bump rouge from 4.5.0 to 4.5.1 in the all-gems group across 1 directory |
| 157 | +*[#5350](https://github.com/pmd/pmd/pull/5350): Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.17.0 |
| 158 | +*[#5356](https://github.com/pmd/pmd/pull/5356): Bump build-tools to 28 |
| 159 | +*[#5357](https://github.com/pmd/pmd/pull/5357): Bump log4j.version from 2.23.0 to 2.24.2 |
| 160 | +*[#5358](https://github.com/pmd/pmd/pull/5358): Bump org.apache.maven.plugins:maven-dependency-plugin from 3.7.1 to 3.8.1 |
| 161 | +*[#5359](https://github.com/pmd/pmd/pull/5359): Bump org.apache.maven.plugins:maven-release-plugin from 3.0.1 to 3.1.1 |
| 162 | +*[#5360](https://github.com/pmd/pmd/pull/5360): Bump io.github.apex-dev-tools:apex-ls_2.13 from 5.2.0 to 5.5.0 |
| 163 | +*[#5361](https://github.com/pmd/pmd/pull/5361): Bump ant.version from 1.10.14 to 1.10.15 |
| 164 | +*[#5362](https://github.com/pmd/pmd/pull/5362): Bump org.jetbrains:annotations from 24.1.0 to 26.0.1 |
| 165 | +*[#5363](https://github.com/pmd/pmd/pull/5363): Bump com.puppycrawl.tools:checkstyle from 10.18.1 to 10.20.1 |
| 166 | +*[#5364](https://github.com/pmd/pmd/pull/5364): Bump info.picocli:picocli from 4.7.5 to 4.7.6 |
| 167 | +*[#5365](https://github.com/pmd/pmd/pull/5365): Bump com.github.hazendaz.maven:coveralls-maven-plugin from 4.5.0-M3 to 4.5.0-M5 |
| 168 | +*[#5366](https://github.com/pmd/pmd/pull/5366): Bump org.mockito:mockito-core from 4.11.0 to 5.14.2 |
| 169 | +*[#5367](https://github.com/pmd/pmd/pull/5367): Bump surefire.version from 3.2.5 to 3.5.2 |
| 170 | +*[#5368](https://github.com/pmd/pmd/pull/5368): Bump org.junit.platform:junit-platform-suite from 1.11.2 to 1.11.3 |
| 171 | + |
| 172 | +###📈 Stats |
| 173 | +<!-- content will be automatically generated, see /do-release.sh--> |
| 174 | +* 216 commits |
| 175 | +* 55 closed tickets & PRs |
| 176 | +* Days since last release: 35 |