|  | 
|  | 1 | +--- | 
|  | 2 | +layout: post | 
|  | 3 | +title: PMD 7.12.0 released | 
|  | 4 | +--- | 
|  | 5 | + | 
|  | 6 | +## 28-March-2025 - 7.12.0 | 
|  | 7 | + | 
|  | 8 | +The PMD team is pleased to announce PMD 7.12.0. | 
|  | 9 | + | 
|  | 10 | +This is a minor release. | 
|  | 11 | + | 
|  | 12 | +### Table Of Contents | 
|  | 13 | + | 
|  | 14 | +* [🚀 New and noteworthy](#new-and-noteworthy) | 
|  | 15 | +    * [✨ New Rules](#new-rules) | 
|  | 16 | +* [🐛 Fixed Issues](#fixed-issues) | 
|  | 17 | +* [🚨 API Changes](#api-changes) | 
|  | 18 | +    * [Deprecations](#deprecations) | 
|  | 19 | +* [✨ Merged pull requests](#merged-pull-requests) | 
|  | 20 | +* [📦 Dependency updates](#dependency-updates) | 
|  | 21 | +* [📈 Stats](#stats) | 
|  | 22 | + | 
|  | 23 | +### 🚀 New and noteworthy | 
|  | 24 | + | 
|  | 25 | +#### ✨ New Rules | 
|  | 26 | + | 
|  | 27 | +* The new Java rule [`ImplicitFunctionalInterface`](https://docs.pmd-code.org/pmd-doc-7.12.0/pmd_rules_java_bestpractices.html#implicitfunctionalinterface) reports functional interfaces that were | 
|  | 28 | +  not explicitly declared as such with the annotation `@FunctionalInterface`. If an interface is accidentally a functional | 
|  | 29 | +  interface, then it should bear a `@SuppressWarnings("PMD.ImplicitFunctionalInterface")` | 
|  | 30 | +  annotation to make this clear. | 
|  | 31 | + | 
|  | 32 | +### 🐛 Fixed Issues | 
|  | 33 | +* core | 
|  | 34 | +  * [#5593](https://github.com/pmd/pmd/issues/5593): \[core] Make renderers output files in deterministic order even when multithreaded | 
|  | 35 | +* apex | 
|  | 36 | +  * [#5567](https://github.com/pmd/pmd/issues/5567): \[apex] Provide type information for CastExpression | 
|  | 37 | +* apex-design | 
|  | 38 | +  * [#5616](https://github.com/pmd/pmd/issues/5616): \[apex] ExcessiveParameterList reports entire method instead of signature only | 
|  | 39 | +* java | 
|  | 40 | +  * [#5587](https://github.com/pmd/pmd/issues/5587): \[java] Thread deadlock during PMD analysis in ParseLock.getFinalStatus | 
|  | 41 | +* java-bestpractices | 
|  | 42 | +  * [#2849](https://github.com/pmd/pmd/issues/2849): \[java] New Rule: ImplicitFunctionalInterface | 
|  | 43 | +  * [#5369](https://github.com/pmd/pmd/issues/5369): \[java] UnusedPrivateMethod false positives with lombok.val | 
|  | 44 | +  * [#5590](https://github.com/pmd/pmd/issues/5590): \[java] LiteralsFirstInComparisonsRule not applied on constant | 
|  | 45 | +  * [#5592](https://github.com/pmd/pmd/issues/5592): \[java] UnusedAssignment false positive in record compact constructor | 
|  | 46 | +* java-codestyle | 
|  | 47 | +  * [#5079](https://github.com/pmd/pmd/issues/5079): \[java] LocalVariableCouldBeFinal false-positive with lombok.val | 
|  | 48 | +  * [#5452](https://github.com/pmd/pmd/issues/5452): \[java] PackageCase: Suppression comment has no effect due to finding at wrong position in case of JavaDoc comment | 
|  | 49 | +* plsql | 
|  | 50 | +  * [#4441](https://github.com/pmd/pmd/issues/4441): \[plsql] Parsing exception with XMLQUERY function in SELECT | 
|  | 51 | +  * [#5521](https://github.com/pmd/pmd/issues/5521): \[plsql] Long parse time and eventually parse error with XMLAGG order by clause | 
|  | 52 | + | 
|  | 53 | +### 🚨 API Changes | 
|  | 54 | +#### Deprecations | 
|  | 55 | +* java | 
|  | 56 | +  * The method <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/ast/AbstractJavaExpr.html#buildConstValue()"><code>buildConstValue</code></a> is deprecated for removal. It should | 
|  | 57 | +    have been package-private from the start. In order to get the (compile time) const value of an expression, use | 
|  | 58 | +    <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/ast/ASTExpression.html#getConstValue()"><code>getConstValue</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/ast/ASTExpression.html#getConstFoldingResult()"><code>getConstFoldingResult</code></a> | 
|  | 59 | +    instead. | 
|  | 60 | +  * For the same reason, the following methods are also deprecated for removal: | 
|  | 61 | +    <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/ast/ASTNumericLiteral.html#buildConstValue()"><code>buildConstValue</code></a> and <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/ast/ASTStringLiteral.html#buildConstValue()"><code>buildConstValue</code></a>. | 
|  | 62 | + | 
|  | 63 | +- <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.12.0/net/sourceforge/pmd/lang/java/types/JTypeVar.html#withUpperbound(net.sourceforge.pmd.types.JTypeMirror)"><code>JTypeVar#withUpperbound</code></a> is deprecated. It was previously meant to be used | 
|  | 64 | +  internally and not needed anymore. | 
|  | 65 | + | 
|  | 66 | +### ✨ Merged pull requests | 
|  | 67 | +<!-- content will be automatically generated, see /do-release.sh --> | 
|  | 68 | +* [#5550](https://github.com/pmd/pmd/pull/5550): Fix #5521: \[plsql] Improve parser performance by reducing lookaheads - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 69 | +* [#5554](https://github.com/pmd/pmd/pull/5554): Fix #5369: \[java] Consider that lombok.val and var are inferred - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 70 | +* [#5555](https://github.com/pmd/pmd/pull/5555): Fix #2849: \[java] Add rule ImplicitFunctionalInterface - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 71 | +* [#5556](https://github.com/pmd/pmd/pull/5556): \[ci] New workflow "Publish Results from Pull Requests" - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 72 | +* [#5574](https://github.com/pmd/pmd/pull/5574): Fix #5567: \[apex] Provide type info for CastExpression - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 73 | +* [#5583](https://github.com/pmd/pmd/pull/5583): \[java] Fix race condition in ClassStub for inner classes - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 74 | +* [#5586](https://github.com/pmd/pmd/pull/5586): \[java/core] Micro optimizations  - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 75 | +* [#5588](https://github.com/pmd/pmd/pull/5588): \[java] Fix crash when parsing class for anonymous class - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 76 | +* [#5591](https://github.com/pmd/pmd/pull/5591): Fix #5587: \[java] Fix deadlock while loading ClassStub - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 77 | +* [#5593](https://github.com/pmd/pmd/pull/5593): \[core] Make renderers output files in deterministic order even when multithreaded - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 78 | +* [#5595](https://github.com/pmd/pmd/pull/5595): Fix #5590: \[java] LiteralsFirstInComparisons with constant field - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 79 | +* [#5596](https://github.com/pmd/pmd/pull/5596): Fix #4441: \[plsql] XMLQuery - Support identifier as XQuery_string parameter - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 80 | +* [#5598](https://github.com/pmd/pmd/pull/5598): Fix #5592: \[java] Fix UnusedAssignment FP with compact record ctor - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 81 | +* [#5600](https://github.com/pmd/pmd/pull/5600): Fix #5079: \[java] LocalVariableCouldBeFinal false-positive with lombok.val - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 82 | +* [#5611](https://github.com/pmd/pmd/pull/5611): Fix #5452: \[java] PackageCase reported on wrong line - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) | 
|  | 83 | +* [#5617](https://github.com/pmd/pmd/pull/5617): Fix #5616: \[apex] ExcessiveParameterList: Report only method signature - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 84 | +* [#5618](https://github.com/pmd/pmd/pull/5618): \[doc] Fix search index - [Andreas Dangel](https://github.com/adangel) (@adangel) | 
|  | 85 | + | 
|  | 86 | +### 📦 Dependency updates | 
|  | 87 | +<!-- content will be automatically generated, see /do-release.sh --> | 
|  | 88 | +* [#5558](https://github.com/pmd/pmd/pull/5558): Bump PMD from 7.10.0 to 7.11.0 | 
|  | 89 | +* [#5561](https://github.com/pmd/pmd/pull/5561): Bump org.apache.groovy:groovy from 4.0.25 to 4.0.26 | 
|  | 90 | +* [#5562](https://github.com/pmd/pmd/pull/5562): Bump org.junit.platform:junit-platform-suite from 1.11.4 to 1.12.0 | 
|  | 91 | +* [#5564](https://github.com/pmd/pmd/pull/5564): Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.4.1 | 
|  | 92 | +* [#5565](https://github.com/pmd/pmd/pull/5565): Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.1.4 | 
|  | 93 | +* [#5566](https://github.com/pmd/pmd/pull/5566): Bump io.github.apex-dev-tools:apex-ls_2.13 from 5.7.0 to 5.8.0 | 
|  | 94 | +* [#5571](https://github.com/pmd/pmd/pull/5571): Bump nokogiri from 1.16.7 to 1.18.3 | 
|  | 95 | +* [#5572](https://github.com/pmd/pmd/pull/5572): Bump uri from 0.13.1 to 1.0.3 | 
|  | 96 | +* [#5575](https://github.com/pmd/pmd/pull/5575): Bump org.jsoup:jsoup from 1.18.3 to 1.19.1 | 
|  | 97 | +* [#5576](https://github.com/pmd/pmd/pull/5576): Bump scalameta.version from 4.13.2 to 4.13.3 | 
|  | 98 | +* [#5577](https://github.com/pmd/pmd/pull/5577): Bump org.yaml:snakeyaml from 2.3 to 2.4 | 
|  | 99 | +* [#5578](https://github.com/pmd/pmd/pull/5578): Bump com.google.protobuf:protobuf-java from 4.29.3 to 4.30.0 | 
|  | 100 | +* [#5580](https://github.com/pmd/pmd/pull/5580): Bump net.bytebuddy:byte-buddy from 1.17.1 to 1.17.2 | 
|  | 101 | +* [#5581](https://github.com/pmd/pmd/pull/5581): Bump com.puppycrawl.tools:checkstyle from 10.21.3 to 10.21.4 | 
|  | 102 | +* [#5582](https://github.com/pmd/pmd/pull/5582): Bump the gems liquid to 5.8.1 and logger to 1.6.6 | 
|  | 103 | +* [#5602](https://github.com/pmd/pmd/pull/5602): Bump org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.1.4 | 
|  | 104 | +* [#5603](https://github.com/pmd/pmd/pull/5603): Bump net.bytebuddy:byte-buddy-agent from 1.17.1 to 1.17.2 | 
|  | 105 | +* [#5604](https://github.com/pmd/pmd/pull/5604): Bump org.mockito:mockito-core from 5.15.2 to 5.16.1 | 
|  | 106 | +* [#5605](https://github.com/pmd/pmd/pull/5605): Bump org.junit.platform:junit-platform-suite from 1.12.0 to 1.12.1 | 
|  | 107 | +* [#5606](https://github.com/pmd/pmd/pull/5606): Bump org.checkerframework:checker-qual from 3.49.0 to 3.49.1 | 
|  | 108 | +* [#5608](https://github.com/pmd/pmd/pull/5608): Bump com.google.protobuf:protobuf-java from 4.30.0 to 4.30.1 | 
|  | 109 | +* [#5619](https://github.com/pmd/pmd/pull/5619): Bump nokogiri from 1.18.3 to 1.18.5 | 
|  | 110 | +* [#5624](https://github.com/pmd/pmd/pull/5624): Bump scalameta.version from 4.13.3 to 4.13.4 | 
|  | 111 | +* [#5627](https://github.com/pmd/pmd/pull/5627): Bump net.bytebuddy:byte-buddy-agent from 1.17.2 to 1.17.4 | 
|  | 112 | +* [#5628](https://github.com/pmd/pmd/pull/5628): Bump io.github.apex-dev-tools:apex-ls_2.13 from 5.8.0 to 5.9.0 | 
|  | 113 | +* [#5629](https://github.com/pmd/pmd/pull/5629): Bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre | 
|  | 114 | +* [#5630](https://github.com/pmd/pmd/pull/5630): Bump net.bytebuddy:byte-buddy from 1.17.2 to 1.17.4 | 
|  | 115 | + | 
|  | 116 | +### 📈 Stats | 
|  | 117 | +<!-- content will be automatically generated, see /do-release.sh --> | 
|  | 118 | +* 114 commits | 
|  | 119 | +* 28 closed tickets & PRs | 
|  | 120 | +* Days since last release: 27 | 
0 commit comments