Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/pmdPublic

Releases: pmd/pmd

PMD 7.20.0-SNAPSHOT (16-December-2025)

28 Nov 12:46
315de47
This commit was created on GitHub.com and signed with GitHub’sverified signature.
GPG key ID:B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

28-December-2025 - 7.20.0-SNAPSHOT

The PMD team is pleased to announce PMD 7.20.0-SNAPSHOT.

This is a minor release.

Table Of Contents

🚀️ New and noteworthy

🐛️ Fixed Issues

  • java-bestpractices
    • #6257: [java] UnusedLocalVariable: False positive with instanceof pattern guard

🚨️ API Changes

✨️ Merged pull requests

📦️ Dependency updates

📈️ Stats

Loading

PMD 7.19.0 (28-November-2025)

28 Nov 11:36
pmd_releases/7.19.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
2373452
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

28-November-2025 - 7.19.0

The PMD team is pleased to announce PMD 7.19.0.

This is a minor release.

Table Of Contents

🚀️ New and noteworthy

Updated PMD Designer

This PMD release ships a new version of the pmd-designer.
For the changes, seePMD Designer Changelog (7.19.0)
andPMD Designer Changelog (7.19.1).

🌟️ New and Changed Rules

New Rules

  • The new Apex ruleAvoidFutureAnnotation finds usages of the@Future
    annotation. It is a legacy way to execute asynchronous Apex code. New code should implement
    theQueueable interface instead.
  • The new Java ruleEnumComparison finds usages ofequals() on
    enum constants or values. Enums should be compared directly with== instead ofequals() which
    has some advantages (e.g. static type checking at compile time).
  • The new Apex ruleNcssCount replaces the four rules "ExcessiveClassLength",
    "NcssConstructorCount", "NcssMethodCount", and "NcssTypeCount". The new rule uses the metrics framework
    to achieve the same. It has two properties, to define the report level for method and class sizes separately.
    Constructors and methods are considered the same.
    The rule has been added to the quickstart ruleset.
    Note: The new metric is implemented more correct than in the old rules. E.g. it considers now also
    switch statements and correctly counts if-statements only once and ignores method calls that are
    part of an expression and not a statement on their own. This leads to different numbers. Keep in mind,
    that NCSS counts statements and not lines of code. Statements that are split on multiple lines are
    still counted as one.
  • The new PL/SQL ruleNcssCount replaces the rules "ExcessiveMethodLength",
    "ExcessiveObjectLength", "ExcessivePackageBodyLength", "ExcessivePackageSpecificationLength",
    "ExcessiveTypeLength", "NcssMethodCount" and "NcssObjectCount". The new rule uses the metrics framework
    to achieve the same. It has two properties, to define the report level for method and object sizes separately.
    Note: the new metric is implemented more correct than in the old rules, so that the actual numbers of
    the NCSS metric from the old rules might be different from the new rule "NcssCount". Statements that are
    split on multiple lines are still counted as one.

Deprecated Rules

🐛️ Fixed Issues

  • core
    • #4767: [core] Deprecate old symboltable API
  • apex-bestpractices
    • #6203: [apex] New Rule: Avoid Future Annotation
  • apex-design
    • #2128: [apex] Merge NCSS count rules for Apex
  • java
    • #5689: [java] Members of record should be in scope in record header
    • #6256: [java] java.lang.IllegalArgumentException: Invalid target type of type annotation for method or ctor type annotation: 19
  • java-bestpractices
    • #5820: [java] GuardLogStatement recognizes that a string is a compile-time constant expression only if at first position
    • #6188: [java] UnitTestShouldIncludeAssert false positive when TestNG @Test.expectedException present
    • #6193: [java] New Rule: Always compare enum values with ==
  • java-codestyle
    • #6053: [java] ModifierOrder false-positives with type annotations and type parameters (typeAnnotations = anywhere)
  • java-errorprone
    • #4742: [java] EmptyFinalizer should not trigger if finalize method is final and class is not
    • #6072: [java] OverrideBothEqualsAndHashCodeOnComparable should not be required for record classes
    • #6092: [java] AssignmentInOperand false positive in 7.17.0 for case blocks in switch statements
    • #6096: [java] OverrideBothEqualsAndHashCodeOnComparable on class with lombok.EqualsAndHashCode annotation
    • #6199: [java] AssignmentInOperand: description of property allowIncrementDecrement is unclear
    • #6273: [java] TestClassWithoutTestCases documentation does not mention test prefixes
  • java-performance
    • #4577: [java] UseArraysAsList with condition in loop
    • #5071: [java] UseArraysAsList should not warn when elements are skipped in array
  • plsql-design
    • #4326: [plsql] Merge NCSS count rules for PL/SQL
  • maintenance
    • #5701: [core] net.sourceforge.pmd.cpd.SourceManager has public methods

🚨️ API Changes

Deprecations

  • core
    • net.sourceforge.pmd.lang.symboltable: All classes in this package are deprecated.
      The symbol table and type resolution implementation for Java has been rewritten from scratch
      for PMD 7.0.0. This package is the remains of the old symbol table API, that is only used by
      PL/SQL. For PMD 8.0.0 all these classes will be removed from pmd-core.
  • apex
Read more

Contributors

  • @judepereira
  • @zbynek
  • @adangel
  • @mrclmh
  • @UncleOwen
  • @mitchspano
  • @oowekyala
  • @lukasgraef
judepereira, zbynek, and 6 other contributors
Assets10
Loading

PMD 7.18.0 (31-October-2025)

31 Oct 08:59
pmd_releases/7.18.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
c37a323
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

31-October-2025 - 7.18.0

The PMD team is pleased to announce PMD 7.18.0.

This is a minor release.

Table Of Contents

🚀️ New and noteworthy

Build Requirement is Java 17

From now on, Java 17 or newer is required to build PMD. PMD itself still remains compatible with Java 8,
so that it still can be used in a pure Java 8 environment. This allows us to use the latest
checkstyle version during the build.

🌟️ New and Changed Rules

New Rules

  • The new Java ruleIdenticalConditionalBranches finds conditional statements
    that do the same thing when the condition is true and false. This is either incorrect or redundant.
  • The new Java ruleLabeledStatement finds labeled statements in code.
    Labels make control flow difficult to understand and should be avoided. By default, the rule allows labeled
    loops (do, while, for). But it has a property to flag also those labeled loops.
  • The new Java ruleUnusedLabel finds unused labels which are unnecessary and
    only make the code hard to read. This new rule will be part of the quickstart ruleset.

Changed Rules

  • ConfusingTernary has a new propertynullCheckBranch to control, whether null-checks
    should be allowed (the default case) or should lead to a violation.
  • AvoidCatchingGenericException is now configurable with the new property
    typesThatShouldNotBeCaught.
    ⚠️ The rule has also been moved from category "Design" to category "Error Prone". If you are currently bulk-adding
    all the rules from the "Design" category into your custom ruleset, then you need to add the rule explicitly
    again (otherwise it won't be included anymore):
    <ruleref="category/java/errorprone.xml/AvoidCatchingGenericException" />

Deprecated Rules

🐛️ Fixed Issues

  • general
    • #4714: [core] Allow trailing commas in multivalued properties
    • #5873: [ci] Run integration test with Java 25
    • #6012: [pmd-rulesets] Rulesets should be in alphabetical order
    • #6073: [doc] Search improvements
    • #6097: [doc] Add PMD versions dropdown
    • #6098: [doc] Add a copy URL button
    • #6101: [doc] Highlight current header in TOC
    • #6149: [doc] Reproducible Build Documentation is outdated - PMD is now built using Java 17
    • #6150: [core] Reduce memory usage of CPD's MatchCollector
  • apex
    • #5935: [apex] @SuppressWarnings - allow whitespace around comma when suppressing multiple rules
  • apex-design
    • #6022: [apex] ExcessiveClassLength/ExcessiveParameterList include the metric in the message
  • apex-documentation
    • #6189: [apex] ApexDoc rule doesn't match published Salesforce ApexDoc specification
  • java
    • #4904: [java] Renderers output wrong class qualified name for nested classes
    • #6127: [java] Incorrect variable name in violation
    • #6132: [java] Implement main method launch protocol priorities
    • #6146: [java] ClassCastException: class InferenceVarSym cannot be cast to class JClassSymbol
  • java-bestpractices
    • #2928: [java] New rules about labeled statements
    • #4122: [java] CheckResultSet false-positive with local variable
    • #6124: [java] UnusedLocalVariable: fix false negatives in pattern matching
    • #6169: [java] AvoidUsingHardCodedIP: violation message should mention the hard coded address
    • #6171: [java] AvoidUsingHardCodedIP: fix false positive for IPv6
  • java-codestyle
    • #5919: [java] ClassNamingConventions: Include integration tests in testClassPattern by default
    • #6004: [java] Make ConfusingTernary != null configurable
    • #6029: [java] Fix UnnecessaryCast false-negative in method calls
    • #6057: [java] ModifierOrder false positive on "abstract sealed class"
    • #6079: [java] IdenticalCatchBranches: False negative for overriden method calls
    • #6123: [java] UselessParentheses FP around switch expression
    • #6131: [java] ModifierOrder: wrong enum values documented, indirectly causing xml parse errors
  • java-design
    • #1499: [java] AvoidDeeplyNestedIfStmts violations can be unintentionally undetected
    • #5569: [java] ExcessivePublicCount should report number of public "things"
  • java-documentation
    • #6058: [java] DanglingJavadoc FP in module-info files
    • #6103: [java] DanglingJavadoc false positive on record compact constructors
  • java-errorprone
    • #5042: [java] CloseResource false-positive on Pattern Matching with instanceof
    • #5878: [java] DontUseFloatTypeForLoopIndices false-negative if variable is declared before loop
    • #6038: [java] Merge AvoidCatchingNPE and AvoidCatchingThrowable into AvoidCatchingGenericException
    • #6055: [java] UselessPureMethodCall false positive with AtomicInteger::getAndIncrement
    • #6060: [java] UselessPureMethodCall false positive on ZipInputStream::getNextEntry
    • #6075: [java] AssignmentInOperand false positive with lambda expressions
    • #6083: [java] New rule IdenticalConditionalBranches
  • java-multithreading
    • #5880: [java] DoubleCheckedLocking is not detected if more than 1 assignment or more than 2 if statements
  • java-performance
    • #6172: [java] InefficientEmptyStringCheck should include String#strip
  • java-security
    • #6191: [java] HardCodedCryptoKey: NPE when constants from parent class are used
  • plsql-design
    • #6077: [plsql] Excessive*/Ncss*Count/NPathComplexity include the metric

🚨️ API Changes

Deprecations

✨️ Merged pull requests

Read more

Contributors

  • @abobov
  • @jsotuyod
  • @zbynek
  • @adangel
  • @UncleOwen
  • @mitchspano
  • @oowekyala
  • @lukasgraef
abobov, jsotuyod, and 6 other contributors
Loading
stokpop reacted with hooray emoji
1 person reacted

PMD 7.17.0 (12-September-2025)

12 Sep 08:10
pmd_releases/7.17.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
d2942d5
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

12-September-2025 - 7.17.0

The PMD team is pleased to announce PMD 7.17.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

✨ New Rules

This release brings several new rules for both Java and Apex. Please try them out
and submit feedback onour issue tracker!

  • The new apex ruleAnnotationsNamingConventions enforces that annotations
    are used consistently in PascalCase.
    The rule is referenced in the quickstart.xml ruleset for Apex.
  • The new java ruleTypeParameterNamingConventions replaces the now deprecated rule
    GenericsNaming. The new rule is configurable and checks for naming conventions of type parameters in
    generic types and methods. It can be configured via a regular expression.
    By default, this rule uses the standard Java naming convention (single uppercase letter).
    The rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleOverrideBothEqualsAndHashCodeOnComparable finds missing
    hashCode() and/orequals() methods on types that implementComparable. This is important if
    instances of these classes are used in collections. Failing to do so can lead to unexpected behavior in sets
    which then do not conform to theSet interface. While theSet interface relies on
    equals() to determine object equality, sorted sets likeTreeSet use
    compareTo() instead. The same issue can arise when such objects are used
    as keys in sorted maps.
    This rule is very similar toOverrideBothEqualsAndHashcode which has always been
    skippingComparable and only reports if one of the two methods is missing. The new rule will also report,
    if both methods (hashCode and equals) are missing.
    The rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleUselessPureMethodCall finds method calls of pure methods
    whose result is not used. Ignoring the result of such method calls is likely as mistake as pure
    methods are side effect free.
    The rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleRelianceOnDefaultCharset finds method calls that
    depend on the JVM's default charset. Using these method without specifying the charset explicitly
    can lead to unexpected behavior on different platforms.
  • Thew new java ruleVariableCanBeInlined finds local variables that are
    immediately returned or thrown. This rule replaces the old ruleUnnecessaryLocalBeforeReturn
    which only considered return statements. The new rule also finds unnecessary local variables
    before throw statements.
    The rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleCollectionTypeMismatch detects calls to
    collection methods where we suspect the types are incompatible. This happens for instance
    when you try to remove aString from aCollection<Integer>: although it is allowed
    to write this becauseremove takes anObject parameter, it is most likely a mistake.
    This rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleDanglingJavadoc finds Javadoc comments that
    do not belong to a class, method or field. These comments are ignored by the Javadoc tool
    and should either be corrected or removed.
    The rule is referenced in the quickstart.xml ruleset for Java.
  • The new java ruleModifierOrder (codestyle) finds incorrectly ordered modifiers
    (e.g.,static public instead ofpublic static). It ensures modifiers appear in the correct order as
    recommended by the Java Language Specification.

Deprecated Rules

CPD: New Markdown Report Format

This PMD version ships with a simple Markdown based output format for CPD. It outputs all duplications
one after another including the code snippets as code blocks.
SeeReport formats for CPD.

🐛 Fixed Issues

  • apex-codestyle
    • #5650: [apex] New Rule: AnnotationsNamingConventions
  • core
    • #4721: [core] chore: Enable XML rule MissingEncoding in dogfood ruleset
    • #5849: [core] Support Markdown Output for CPD Reports
    • #5958: [core] CSVRenderer: Add begin and end for line and columns (default off)
  • java
    • #5874: [java] Update java regression tests with Java 25 language features
    • #5960: [java] Avoid/reduce duplicate error messages for some rules
    • #6014: [java] Crash when encountering a java comment at the end of a file
  • java-bestpractices
    • #2186: [java] New Rule: RelianceOnDefaultCharset
    • #4500: [java] AvoidReassigningLoopVariables - false negatives within for-loops and skip allowed
    • #4770: [java] UnusedFormalParameter should ignore public constructor as same as method
    • #5198: [java] CheckResultSet false-positive with local variable checked in a while loop
  • java-codestyle
    • #972: [java] Improve naming conventions rules
    • #4916: [java] UseExplicitTypes: cases where 'var' should be unobjectionable
    • #5601: [java] New Rule: ModifierOrder
    • #5770: [java] New Rule: VariableCanBeInlined: Local variables should not be declared and then immediately returned or thrown
    • #5922: [java] New Rule: TypeParameterNamingConventions
    • #5948: [java] UnnecessaryBoxing false positive when callingList.remove(int)
    • #5982: [java] More detailed message for the UselessParentheses rule
  • java-design
    • #4911: [java] AvoidRethrowingException should allow rethrowing exception subclasses
    • #5023: [java] UseUtilityClass implementation hardcodes a message instead of using the one defined in the XML
  • java-documentation
    • #5916: [java] New Rule: DanglingJavadoc
  • java-errorprone
    • #3401: [java] Improve AvoidUsingOctalValues documentation
    • #3434: [java] False negatives in AssignmentInOperand Rule
    • #5837: [java] New Rule: OverrideBothEqualsAndHashCodeOnComparable
    • #5881: [java] AvoidLosi...
Read more

Contributors

  • @judepereira
  • @zbynek
  • @adangel
  • @Pankraz76
  • @UncleOwen
  • @mitchspano
  • @oowekyala
  • @lukasgraef
judepereira, zbynek, and 6 other contributors
Loading

PMD 7.16.0 (25-July-2025)

25 Jul 07:00
pmd_releases/7.16.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
d60e268
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

25-July-2025 - 7.16.0

The PMD team is pleased to announce PMD 7.16.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

🚀 New: Java 25 Support

This release of PMD brings support for Java 25.

There are the following new standard language features:

And one preview language feature:

In order to analyze a project with PMD that uses these preview language features,
you'll need to enable it via the environment variablePMD_JAVA_OPTS and select the new language
version25-preview:

export PMD_JAVA_OPTS=--enable-previewpmd check --use-version java-25-preview ...

Note: Support for Java 23 preview language features have been removed. The version "23-preview"
is no longer available.

New: CPD support for CSS

CPD now supports CSS (Cascading Style Sheets), a language for describing the rendering of structured
documents (such as HTML) on screen, on paper etc.
It is shipped with the new modulepmd-css.

✨ New Rules

  • Two new rules have been added to Java's Error Prone category:ReplaceJavaUtilCalendar
    andReplaceJavaUtilDate. These rules help to migrate away from old Java APIs around
    java.util.Calendar andjava.util.Date. It is recommended to use the modernjava.time API instead, which
    is available since Java 8.

🐛 Fixed Issues

  • core
    • #4328: [ci] Improve Github Actions Workflows
    • #5597: [core] POM Incompatibility with Maven 4
  • java
    • #5344: [java] IllegalArgumentException: Invalid type reference for method or ctor type annotation: 16
    • #5478: [java] Support Java 25
  • java-codestyle
    • #5892: [java] ShortVariable false positive for java 22 unnamed variable_
  • java-design
    • #5858: [java] FinalFieldCouldBeStatic false positive for array initializers
  • java-errorprone
    • #2862: [java] New Rules: Avoid java.util.Date and Calendar classes

🚨 API Changes

Experimental APIs that are now considered stable

✨ Merged pull requests

📦 Dependency updates

  • #5857: Bump PMD from 7.14.0 to 7.15.0
  • #5861: Bump scalameta.version from 4.13.7 to 4.13.8
  • #5862: Bump com.puppycrawl.tools:checkstyle from 10.25.1 to 10.26.1
  • #5863: Bump org.apache.maven.plugins:maven-pmd-plugin from 3.26.0 to 3.27.0
  • #5864: Bump kotlin.version from 1.9.24 to 2.2.0
  • #5865: Bump org.junit:junit-bom from 5.13.1 to 5.13.2
  • #5866: Bump org.jsoup:jsoup from 1.20.1 to 1.21.1
  • #5884: Bump org.junit:junit-bom from 5.13.2 to 5.13.3
  • #5885: Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.7 to 3.2.8
  • #5886: Bump org.checkerframework:checker-qual from 3.49.4 to 3.49.5
  • #5889: Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.5.0 to 3.6.0
  • #5900: Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0
  • #5901: Bump io.github.apex-dev-tools:apex-parser from 4.4.0 to 4.4.1
  • #5902: Bump log4j.version from 2.25.0 to 2.25.1
  • #5910: Bump maven from 3.9.10 to 3.9.11
  • #5921: Bump build-tools from 32 to 33
  • #5926: chore(deps): bump org.apache.maven.plugins:maven-enforcer-plugin from 3.6.0 to 3.6.1
  • #5927: chore(deps): bump ostruct from 0.6.2 to 0.6.3 in /.ci/files in the all-gems group across 1 directory
  • #5928: chore(deps): bump marocchino/sticky-pull-request-comment from 2.9.3 to 2.9.4 in the all-actions group
  • #5929: chore(deps): Update gems

📈 Stats

  • 100 commits
  • 21 closed tickets & PRs
  • Days since last release: 27

Contributors

  • @zbynek
  • @adangel
  • @UncleOwen
  • @tprouvot
  • @lukasgraef
zbynek, adangel, and 3 other contributors
Loading
zbynek, ernestovalent, and tgkprog reacted with thumbs up emoji
3 people reacted

PMD 7.15.0 (27-June-2025)

27 Jun 12:45
pmd_releases/7.15.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
f06835e
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

27-June-2025 - 7.15.0

The PMD team is pleased to announce PMD 7.15.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

✨ New Rules

  • The new Apex ruleAvoidBooleanMethodParameters finds methods that take a
    boolean parameter. This can make method calls difficult to understand and maintain as the method is clearly
    doing two things.

🐛 Fixed Issues

  • apex-design
    • #5427: [apex] New Rule: Avoid Boolean Method Parameters
  • apex-security
    • #5788: [apex] ApexCRUDViolation unable to detect insecure SOQL if it is a direct input argument
  • doc
    • #5790: [doc] Website rule reference pages are returning 404
  • java-bestpractices
    • #5785: [java] UnusedPrivateField doesn't play well with UnnecessaryWarningSuppression
    • #5793: [java] NonExhaustiveSwitch fails on exhaustive switch with sealed class
  • java-codestyle
    • #1639: [java] UnnecessaryImport false positive for multiline @link Javadoc
    • #2304: [java] UnnecessaryImport false positive for on-demand imports in JavaDoc
    • #5832: [java] UnnecessaryImport false positive for multiline @see Javadoc
  • java-design
    • #5804: [java] UselessOverridingMethod doesn't play well with UnnecessarySuppressWarning

🚨 API Changes

Rule Test Schema

The rule test schema has been extended to support verifying suppressed violations.
SeeTesting your rules for more information.

Also note, the schemarule-tests.xsd
is now only in the module "pmd-test-schema". It has been removed from the old location from module "pmd-test".

💵 Financial Contributions

Many thanks to our sponsors:

✨ Merged pull requests

📦 Dependency updates

  • #5775: Bump PMD from 7.13.0 to 7.14.0
  • #5778: Bump the all-gems group across 2 directories with 3 updates
  • #5779: Bump org.codehaus.mojo:exec-maven-plugin from 3.5.0 to 3.5.1
  • #5780: Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.1 to 3.5.0
  • #5781: Bump com.google.protobuf:protobuf-java from 4.31.0 to 4.31.1
  • #5782: Bump org.apache.groovy:groovy from 4.0.26 to 4.0.27
  • #5783: Bump com.puppycrawl.tools:checkstyle from 10.24.0 to 10.25.0
  • #5784: Bump org.junit:junit-bom from 5.12.2 to 5.13.0
  • #5807: Bump maven from 3.9.8 to 3.9.10
  • #5809: Bump org.codehaus.mojo:build-helper-maven-plugin from 3.6.0 to 3.6.1
  • #5810: Bump org.junit:junit-bom from 5.13.0 to 5.13.1
  • #5811: Bump junit5.platform.version from 1.13.0 to 1.13.1
  • #5812: Bump org.checkerframework:checker-qual from 3.49.3 to 3.49.4
  • #5813: Bump the all-gems group across 2 directories with 1 update
  • #5828: Bump scalameta.version from 4.13.6 to 4.13.7
  • #5829: Bump liquid from 5.8.6 to 5.8.7 in /.ci/files in the all-gems group across 1 directory
  • #5838: Bump marocchino/sticky-pull-request-comment from 2.9.2 to 2.9.3 in the all-actions group
  • #5839: Bump log4j.version from 2.24.3 to 2.25.0
  • #5840: Bump com.puppycrawl.tools:checkstyle from 10.25.0 to 10.25.1
  • #5841: Bump net.bytebuddy:byte-buddy-agent from 1.17.5 to 1.17.6
  • #5842: Bump net.bytebuddy:byte-buddy from 1.17.5 to 1.17.6
  • #5843: Bump org.sonatype.central:central-publishing-maven-plugin from 0.7.0 to 0.8.0
  • #5844: Bump ostruct from 0.6.1 to 0.6.2 in /.ci/files in the all-gems group across 1 directory
  • #5853: Bump build-tools from 30 to 32

📈 Stats

  • 91 commits
  • 24 closed tickets & PRs
  • Days since last release: 27

Contributors

  • @adangel
  • @cybozu
  • @Pankraz76
  • @UncleOwen
  • @mitchspano
  • @lukasgraef
adangel, cybozu, and 4 other contributors
Loading

PMD 7.14.0 (30-May-2025)

30 May 18:45
pmd_releases/7.14.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
876d4ab
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

30-May-2025 - 7.14.0

The PMD team is pleased to announce PMD 7.14.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

PMD CLI now uses threaded execution by default

In the PMD CLI, the--threads (-t) option can now accept a thread
count given relative to the number of cores of the machine. For instance,
it is now possible to write-t 1C to spawn one thread per core, or-t 0.5C
to spawn one thread for every other core.

The thread count option now defaults to1C, meaning parallel execution
is used by default. You can disable this by using-t 1.

New Rule UnnecessaryWarningSuppression (experimental)

This new Java ruleUnnecessaryWarningSuppression reports unused suppression
annotations and comments. Violations of this rule cannot be suppressed.

How to use it? Just include it in your ruleset:

<ruleref="category/java/bestpractices.xml/UnnecessaryWarningSuppression" />

Note: This rule is currently experimental. It is available for now only for Java.
The rule for now only reports annotations specific to PMD, like@SuppressWarnings("PMD").
In the future we might be able to check for other common ones like@SuppressWarnings("unchecked") or"fallthrough".
Since violations of this rule cannot be suppressed, we opted here on the side of false-negatives and
don't report every unused case yet.
However, suppressing specific PMD rules is working as expected.

Migrating to Central Publisher Portal

We've now migrated toCentral Publisher Portal.
Snapshots of PMD are still available, however the repository URL changed. To consume these with maven, you can
use the following snippet:

<repositories>  <repository>    <name>Central Portal Snapshots</name>    <id>central-portal-snapshots</id>    <url>https://central.sonatype.com/repository/maven-snapshots/</url>    <releases>      <enabled>false</enabled>    </releases>    <snapshots>      <enabled>true</enabled>    </snapshots>  </repository></repositories>

Releases of PMD are available onMaven Central as before without change.

More CLI parameters shared between PMD and CPD

When executing PMD or CPD, the same parameters are now understood for selecting which files should
be analyzed. SeeFile collection options
for a list of common, shared parameters that are valid for both commands.

🐛 Fixed Issues

  • core
    • #648: [core] Warn on unneeded suppression
    • #5700: [core] Don't accidentally catch unexpected runtime exceptions in CpdAnalysis
    • #5705: [cli] PMD's start script fails if PMD_HOME is set
  • java-bestpractices
    • #5061: [java] UnusedLocalVariable false positive when variable is read as side effect of an assignment
    • #5621: [java] UnusedPrivateMethod with method ref
    • #5724: [java] ImplicitFunctionalInterface should not be reported on sealed interfaces
  • java-codestyle
    • #2462: [java] LinguisticNaming must ignore setters that returns current type (Builder pattern)
    • #5634: [java] CommentDefaultAccessModifier doesn't recognize /* package */ comment at expected location for constructors
  • java-design
    • #5568: [java] High NPathComplexity inswitch expression
    • #5647: [java] NPathComplexity does not account forreturns
  • java-errorprone
    • #5702: [java] InvalidLogMessageFormat: Lombok @Slf4j annotation is not interpreted by PMD
  • java-performance
    • #5711: [java] UseArraysAsList false positive with Sets
  • visualforce
    • #5476: [visualforce] NPE when analyzing standard field references in visualforce page

🚨 API Changes

CLI

  • CPD now supports--report-file (-r) and--exclude-file-list.
  • PMD now supports--exclude and--non-recursive.
  • The option--ignore-list in PMD is renamed to--exclude-file-list.

Deprecations

Experimental

✨ Merged pull requests

Read more

Contributors

  • @elharo
  • @adangel
  • @oowekyala
  • @lukasgraef
elharo, adangel, and 2 other contributors
Loading

PMD 7.13.0 (25-April-2025)

25 Apr 08:32
pmd_releases/7.13.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
d83c182
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

25-April-2025 - 7.13.0

The PMD team is pleased to announce PMD 7.13.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

Docker images

PMD is now providing official docker images athttps://hub.docker.com/r/pmdcode/pmd and
https://github.com/pmd/docker/pkgs/container/pmd.

You can now analyze your code with PMD by using docker like so:

docker run --rm --tty -v $PWD:/src pmdcode/pmd:latest check -d . -R rulesets/java/quickstart.xml`

More information is available athttps://github.com/pmd/docker.

Experimental support for language dialects

A dialect is a particular form of another supported language. For example, an XSLT is a particular
form of an XML. Even though the dialect has its own semantics and uses, the contents are still readable
by any tool capable of understanding the base language.

In PMD, a dialect allows to set up completely custom rules, XPath functions, properties and metrics
for these files; while retaining the full support of the underlying base language including
already existing rules and XPath functions.

See[core] Support language dialects #5438 and
Adding a new dialect for more information.

✨ New Rules

  • The new Apex ruleTypeShadowsBuiltInNamespace finds Apex classes, enums, and interfaces
    that have the same name as a class, enum, or interface in theSystem orSchema namespace.
    Shadowing these namespaces in this way can lead to confusion and unexpected behavior.

🐛 Fixed Issues

  • core
    • #5438: [core] Support language dialects
    • #5448: Maintain a public PMD docker image
    • #5525: [core] Add rule priority as level to Sarif report
    • #5623: [dist] Make pmd launch script compatible with /bin/sh
  • apex-bestpractices
    • #5667: [apex] ApexUnitTestShouldNotUseSeeAllDataTrue false negative when seeAllData parameter is a string
  • apex-errorprone
    • #3184: [apex] Prevent classes from shadowing System Namespace
  • java
    • #5645: [java] Parse error on switch with yield
  • java-bestpractices
    • #5687: [java] UnusedPrivateMethodRule: exclude serialization method readObjectNoData()
  • plsql
    • #5675: [plsql] Parse error with TREAT function

🚨 API Changes

Deprecations

Experimental API

✨ Merged pull requests

📦 Dependency updates

  • #5607: Bump org.junit:junit-bom from 5.11.4 to 5.12.1
  • #5641: Bump PMD from 7.11.0 to 7.12.0
  • #5653: Bump org.sonarsource.scanner.maven:sonar-maven-plugin from 5.0.0.4389 to 5.1.0.4751
  • #5654: Bump surefire.version from 3.5.2 to 3.5.3
  • #5655: Bump com.google.guava:guava from 33.4.5-jre to 33.4.6-jre
  • #5656: Bump org.ow2.asm:asm from 9.7.1 to 9.8
  • #5657: Bump com.google.protobuf:protobuf-java from 4.30.1 to 4.30.2
  • #5658: Bump logger from 1.6.6 to 1.7.0 in /.ci/files in the all-gems group across 1 directory
  • #5671: Bump checkstyle from 10.21.4 to 10.23.0
  • #5676: Bump org.checkerframework:checker-qual from 3.49.1 to 3.49.2
  • #5677: Bump junit5.platform.version from 1.12.1 to 1.12.2
  • #5678: Bump org.apache.commons:commons-text from 1.13.0 to 1.13.1
  • #5679: Bump com.google.guava:guava from 33.4.6-jre to 33.4.7-jre
  • #5680: Bump org.mockito:mockito-core from 5.16.1 to 5.17.0
  • #5681: Bump org.jacoco:jacoco-maven-plugin from 0.8.12 to 0.8.13
  • [#5682](#5...
Read more

Contributors

  • @cowwoc
  • @jsotuyod
  • @jetmore
  • @adangel
  • @Pankraz76
  • @mitchspano
  • @oowekyala
  • @tprouvot
  • @dwgrth
  • @julees7
cowwoc, jsotuyod, and 8 other contributors
Loading

PMD 7.12.0 (28-March-2025)

28 Mar 08:27
pmd_releases/7.12.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
9dbf50e
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

28-March-2025 - 7.12.0

The PMD team is pleased to announce PMD 7.12.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

✨ New Rules

  • The new Java ruleImplicitFunctionalInterface reports functional interfaces that were
    not explicitly declared as such with the annotation@FunctionalInterface. If an interface is accidentally a functional
    interface, then it should bear a@SuppressWarnings("PMD.ImplicitFunctionalInterface")
    annotation to make this clear.

🐛 Fixed Issues

  • core
    • #5593: [core] Make renderers output files in deterministic order even when multithreaded
  • apex
    • #5567: [apex] Provide type information for CastExpression
  • apex-design
    • #5616: [apex] ExcessiveParameterList reports entire method instead of signature only
  • java
    • #5587: [java] Thread deadlock during PMD analysis in ParseLock.getFinalStatus
  • java-bestpractices
    • #2849: [java] New Rule: ImplicitFunctionalInterface
    • #5369: [java] UnusedPrivateMethod false positives with lombok.val
    • #5590: [java] LiteralsFirstInComparisonsRule not applied on constant
    • #5592: [java] UnusedAssignment false positive in record compact constructor
  • java-codestyle
    • #5079: [java] LocalVariableCouldBeFinal false-positive with lombok.val
    • #5452: [java] PackageCase: Suppression comment has no effect due to finding at wrong position in case of JavaDoc comment
  • plsql
    • #4441: [plsql] Parsing exception with XMLQUERY function in SELECT
    • #5521: [plsql] Long parse time and eventually parse error with XMLAGG order by clause

🚨 API Changes

Deprecations

✨ Merged pull requests

📦 Dependency updates

  • #5558: Bump PMD from 7.10.0 to 7.11.0
  • #5561: Bump org.apache.groovy:groovy from 4.0.25 to 4.0.26
  • #5562: Bump org.junit.platform:junit-platform-suite from 1.11.4 to 1.12.0
  • #5564: Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.4.1
  • #5565: Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.1.4
  • #5566: Bump io.github.apex-dev-tools:apex-ls_2.13 from 5.7.0 to 5.8.0
  • #5571: Bump nokogiri from 1.16.7 to 1.18.3
  • #5572: Bump uri from 0.13.1 to 1.0.3
  • #5575: Bump org.jsoup:jsoup from 1.18.3 to 1.19.1
  • #5576: Bump scalameta.version from 4.13.2 to 4.13.3
  • #5577: Bump org.yaml:snakeyaml from 2.3 to 2.4
  • #5578: Bump com.google.protobuf:protobuf-java from 4.29.3 to 4.30.0
  • #5580: Bump net.bytebuddy:byte-buddy from 1.17.1 to 1.17.2
  • #5581: Bump com.puppycrawl.tools:checkstyle from 10.21.3 to 10.21.4
  • #5582: Bump the gems liquid to 5.8.1 and logger to 1.6.6
  • #5602: Bump org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.1.4
  • #5603: Bump net.bytebuddy:byte-buddy-agent from 1.17.1 to 1.17.2
  • #5604: Bump org.mockito:mockito-core from 5.15.2 to 5.16.1
  • #5605: Bump org.junit.platform:junit-platform-suite from 1.12.0 to 1.12.1
  • #5606: Bump org.checkerframework:checker-qual from 3.49.0 to 3.49.1
  • #5608: Bump com.google.protobuf:protobuf-java from 4.30.0 to 4.30.1
  • #5619: Bump nokogiri from 1.18.3 to 1.18.5
  • #5624: Bump scalameta.version from 4.13.3 to 4.13.4
  • #5627: Bump net.bytebuddy:byte-buddy-agent from 1.17.2 to 1.17.4
  • #5628: Bump io.github.apex-dev-tools:apex-ls_2.13 from 5.8.0 to 5.9.0
  • #5629: Bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre
  • #5630: Bump net.bytebuddy:byte-buddy from 1.17.2 to 1.17.4

📈 Stats

Read more

Contributors

  • @adangel
  • @oowekyala
adangel and oowekyala
Loading
limehee and Timer-keeper reacted with thumbs up emojistokpop and jborgers reacted with hooray emojilimehee reacted with rocket emoji
4 people reacted

PMD 7.11.0 (28-February-2025)

28 Feb 11:24
pmd_releases/7.11.0
This tag was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.
0bc8da3
This commit was signed with the committer’sverified signature.
adangel Andreas Dangel
GPG key ID:93450DF2DF9A3FA3
Verified
Learn about vigilant mode.

Choose a tag to compare

28-February-2025 - 7.11.0

The PMD team is pleased to announce PMD 7.11.0.

This is a minor release.

Table Of Contents

🚀 New and noteworthy

✨ New Rules

  • The new Apex ruleAvoidStatefulDatabaseResult detectsDatabase.Stateful implementations
    that store database results in instance variables. This can cause serialization issues between successive batch
    iterations.

Signed Releases

We now not only sign the maven artifacts, but also our binary distribution files that you can
download fromGitHub Releases.
See the pageSigned Releases in our documentation for how to verify the files.

🐛 Fixed Issues

  • apex-errorprone
    • #5305: [apex] New Rule: Avoid Stateful Database Results
  • java
    • #5442: [java] StackOverflowError with recursive generic types
    • #5493: [java] IllegalArgumentException: <?> cannot be a wildcard bound
    • #5505: [java] java.lang.StackOverflowError while executing a PmdRunnable
  • java-bestpractices
    • #3359: [java] UnusedPrivateMethod does not recognize Lombok @EqualsAndHashCode.Include annotation
    • #5486: [java] UnusedPrivateMethod detected when class is referenced in another class
    • #5504: [java] UnusedAssignment false-positive in for-loop with continue
  • java-codestyle
    • #4822: [java] UnnecessaryCast false-positive for raw types
    • #5073: [java] UnnecessaryCast false-positive for cast in return position of lambda
    • #5440: [java] UnnecessaryCast reported in stream chain map() call that casts to more generic interface
    • #5523: [java] UnnecessaryCast false-positive for integer operations in floating-point context
    • #5541: [java] Fix IdenticalCatchBranch reporting branches that call different overloads
  • java-design
    • #5018: [java] FinalFieldCouldBeStatic false-positive for access of super class field
  • plsql
    • #5522: [plsql] Parse error for operator in TRIM function call

🚨 API Changes

Deprecations

✨ Merged pull requests

📦 Dependency updates

  • #5490: Bump PMD from 7.9.0 to 7.10.0
  • #5494: Bump liquid from 5.7.1 to 5.7.2 in the all-gems group across 1 directory
  • #5497: Bump net.bytebuddy:byte-buddy-agent from 1.16.1 to 1.17.0
  • #5498: Bump org.assertj:assertj-core from 3.25.3 to 3.27.3
  • #5499: Bump org.mockito:mockito-core from 5.14.2 to 5.15.2
  • #5500: Bump org.junit:junit-bom from 5.11.2 to 5.11.4
  • #5501: Bump org.scala-lang:scala-reflect from 2.13.15 to 2.13.16
  • #5516: Bump org.jetbrains:annotations from 26.0.1 to 26.0.2
  • #5517: Bump net.bytebuddy:byte-buddy from 1.15.11 to 1.17.0
  • #5518: Bump org.junit.platform:junit-platform-suite from 1.11.3 to 1.11.4
  • #5519: Bump org.checkerframework:checker-qual from 3.48.3 to 3.49.0
  • #5520: Bump com.google.guava:guava from 33.0.0-jre to 33.4.0-jre
  • #5532: Bump net.bytebuddy:byte-buddy-agent from 1.17.0 to 1.17.1
  • #5533: Bump log4j.version from 2.24.2 to 2.24.3
  • #5534: Bump com.google.code.gson:gson from 2.11.0 to 2.12.1
  • #5535: Bump scalameta.version from 4.12.7 to 4.13.1.1
  • #5536: Bump org.apache.groovy:groovy from 4.0.24 to 4.0.25
  • #5545: Bump commons-logging:commons-logging from 1.3.4 to 1.3.5
  • #5546: Bump scalameta.version from 4.13.1.1 to 4.13.2
  • #5547: Bump net.bytebuddy:byte-buddy from 1.17.0 to 1.17.1
  • #5548: Bump com.puppycrawl.tools:checkstyle from 10.21.2 to 10.21.3
  • #5549: Bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.14.0

📈 Stats

  • 97 commits
  • 35 closed tickets & PRs
    ...
Read more

Contributors

  • @adangel
  • @mitchspano
  • @oowekyala
  • @gbq6
adangel, mitchspano, and 2 other contributors
Loading
Previous13451011
Previous

[8]ページ先頭

©2009-2025 Movatter.jp