-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
PMD 7.0.0 Status
This document aims to provide an up-to-date status overview of where we are with PMD 7.
Last Update: 2023-01-23
These should go away and be merged into only one PMD 7 tracking issue (possibly into #3898).
-
Old Tracking Issues
- #1139 [doc] Documentations improvements tracker #1139
- #1432 [core] Implementation plan for property framework changes #1432
- #1931 [all] Integrate new PMD logo #1931
- #2523 [core] XPath Improvements for PMD 7 #2523
- #2524 PMD 7 Miscellaneous Tasks #2524
- #2612 [core] Ruleset schema compatibility steps #2612
- #2701 [java] Java-grammar progress document #2701
- #3915 [java] Java rule changes for PMD 7 #3915
- #3916 [core] Package consolidations for PMD 7 #3916
-
Core
-
in:ast
- #880 [core] Make visitors generic #880
- #1622 [core] NodeStream API #1622
- #2211 [core] Merge JavaCC build scripts #2211
- #2218 [core] isFindBoundary should not be an attribute #2218
- #2220 [core] Things missing in the node stream API #2220
- #2405 [core] Add wildcards to node stream API #2405
- #2447 [core] Cleanup Node and AbstractNode #2447
- #2460 Merge #2447 [core] Cleanup Node and AbstractNode in java-grammar #2460
- #2589 [core] Add generic visitor interface in pmd-core #2589
- #2602 [core] Remove ParserOptions #2602
- #2664 [core] Bug with node stream drop #2664
- #2746 [core, ...] Finish generic visitors #2746
- #2886 [core] Deprecate old traversal methods on the Node interface #2886
-
in:pmd-internals
- #1426 [core] Abstract away optional AST traversals (first step) #1426
- #1446 [java] Use default method on generated visitor interfaces #1446
- #1796 [core] Wire processing stages into SourceCodeProcessor #1796
- #1823 [core] refactor: Make the children array never null #1823
- #1827 [core] Add checker-qual dependency #1827
- #2239 [core] Merging Javacc build scripts #2239
- #3498 [core] Enable CPD check (pmd7) #3498
-
in:ruleset-xml
-
is:feature-removal
❓ that's not a good category... -
in:cli
-
in:metrics
-
in:cpd
-
dependencies
- Property API
- ANTLR Support
- Renderer and Reporting and Violation API
- #2055 [core] Violation suppressors #2055
- #3203 [core] Replace RuleViolationFactory implementations with ViolationDecorator #3203
- #3902 [core] Violation decorators #3902
- #4050 [core] Implement violation decorators #4050
- #4057 [core] Fix lazy init for allSuppressors in DefaultRuleViolationFactory #4057
- Error Handling and Reporting
-
unlabelled
- #1785 [core] Allow abstract node types to be valid rulechain visits #1785
- #2035 [core] Remove incomplete language modules #2035
- #2198 [core] Replace Ruleset file filters with predicates #2198
- #2248 [core] Cleanup language version handlers #2248
- #2490 [core] Simplify the rulechain #2490
- #2499 [core] Support for ANTLR based grammars with Swift as an example language #2499
- #2706 [java] Rename visitor methods to reduce overloading #2706
- #2742 [core] Remove deprecated things about rules #2742
- #3085 [core] Improve Parser interface #3085
- #3692 [core] Analysis listeners #3692
- #3784 [core] Text documents epic #3784
- #3810 [core] Remove processing stages #3810
- #3819 [core] Merge PmdAnalysis into pmd/7.0.x #3819
- #3893 [core] Text documents #3893
- #3918 [core] Make LanguageRegistry non static #3918
- #3969 [core] Replace commons-io (pmd7 merge) #3969
- #4035 [core] ConcurrentModificationException in DefaultRuleViolationFactory #4035
- #4044 [core] Text documents escapes #4044
- #4049 [core] Make LanguageRegistry not static #4049
- #4068 [javacc] Make token constants file internal API #4068
- #4259 [core] Use jar filesystem provider for zip files (pmd7) #4259
-
-
in:documentation
- Logo
- Developer Documentation
- Dependencies
-
in:xpath
- #1825 [core] Support NoAttribute for XPath #1825
- #1826 [core] Remove default implementation of getXPathNodeName #1826
- #1687 [core] Deprecate and Remove XPath 1.0 support #1687
- #2614 [core] Upgrade Saxon, remove Jaxen #2614
- #3207 [core] Make more rules be recognized as rulechain (saxon HE) #3207
- #3815 [core] Update Saxon HE to 10.7 #3815
- #3833 [core] Update saxon to 10.7 #3833
-
in:testing
-
Miscellaneous
-
in:pmd-internals
-
in:testing
-
in:cli
- Logging
- unlabelled
- #1431 [ui] Remove old GUI applications (designerold, bgastviewer) #1431
- #1663 Call For Logo #1663
- #2022 [java,apex] Remove deprecated and unused rules #2022
- #3233 [ci] Upgrade build scripts (pmd7 merge) #3233
- #3399 [ci] Stop autogenerating ruleset from branch differences #3399
- #3871 [ci] Add apex projects for regression testing (pmd7) #3871
- #4080 [ant] Split off Ant integration into a new submodule #4080
- #4089 [ant] Move ant integration to a new pmd-ant module #4089
- #4194 Upgrade kotlin to 1.7.20 (pmd7) #4194
-
-
Language specific
- Apex
- #1648 [apex,vf] Remove CodeClimate dependency #1648
- #1702 [apex,vf] Fix #1648 - Remove CodeClimate dependency #1702
- #1750 [apex] Remove apex statistical rules #1750
- #2667 [apex] Integrate nawforce/ApexLink to build robust Unused rule #2667 done
- #2830 [apex] Apexlink POC #2830
- #2836 [apex] Remove Apex ProjectMirror #2836
-
in:ast
- CPP
- HTML
- Java
-
in:ast
- #905 [java] Add new node for anonymous class declaration #905
- #910 [java] AST inconsistency between primitive and reference type arrays #910
- #997 [java] Java8 parsing corner case with annotated array types #997
- #998 [java] AST inconsistencies around FormalParameter #998
- #1019 [java] Breaking Java Grammar changes for PMD 7.0.0 #1019
- #1128 [java] Improve ASTLocalVariableDeclaration #1128
- #1150 [java] ClassOrInterfaceType AST improvements #1150
- #1367 [java] Parsing error on annotated inner class #1367
- #1659 [java] Remove visitor decorators #1659
- #1661 [java] About operator nodes #1661
- #1759 [java] New expression and type grammar #1759
- #1855 [java] Make new java expression grammar stricter #1855
- #1856 [java] Hide internal AST api #1856
- #1857 [java] Make ClassLiteral not an ASTLiteral #1857
- #1872 [java] Remove ParenthesizedExpr #1872
- #1875 [java] Move annotations inside the node they apply to #1875
- #1888 [java] Remove Name nodes in Import- and PackageDeclaration #1888
- #1890 [java] Merge different increment/decrement expressions #1890
- #1897 [java] Improve try-with-resources grammar #1897
- #1927 [java] Refactor annotation suppression #1927
- #1979 [java] Make binary operators left-recursive #1979
- #1980 [java] Separate receiver parameter from formal parameter #1980
- #1981 [java] Simplify array allocation expressions #1981
- #2034 [java] Align method and constructor declaration grammar #2034
- #2039 [java] Grammar type expr #2039
- #2120 [java] Extract language level checks from parser #2120
- #2155 [java] Merge prefix/postfix expressions into one node #2155
- #2164 [java] Improve statement grammar #2164
- #2166 [java] Make nodes have access to their text #2166
- #2202 [java] Extract CatchParameter from FormalParameter #2202
- #2203 [java] Leftovers about Dimensionable & type annotations #2203
- #2204 [java] Refactor switch grammar #2204
- #2259 [java] Rework AccessNode #2259
- #2271 [java] Add supertype for "list nodes" #2271
- #2272 [java] Make enum body track trailing comma/semi #2272
- #2273 [java] Make lambda expression not a methodlike #2273
- #2282 [java] Use single node for annotations #2282
- #2300 [java] Flatten body declarations #2300
- #2715 [java] Add void type node to replace ResultType #2715
- #2777 [java] Implement constant values #2777
- #2887 [java] Add some methods to java AST #2887
- #3749 [java] Improve isOverridden in ASTMethodDeclaration #3749
- #3757 [java] Improve ASTMethodDeclaration::isOverridden #3757
- #3906 [java] Remove deprecated nodes #3906
-
in:grammar
-
in:symbol-table
- #1566 [java] Symbol reference framework #1566
- #2178 [java] Reflected symbol implementations #2178
- #2228 [java] Symbol tables for imports #2228
- #2281 [java] Implement AST-based symbols #2281
- #2309 [java] Add symbol tables for local declarations #2309
- #2366 [java] Remove qualified names #2366
- #2381 [java] Refactor java processing into a context object #2381
- #2387 [java] Add record support to the newer symbol table #2387
- #2389 [java] Implement AST disambiguation #2389
- #2601 [java] Rewrite symbol table #2601
- #2793 [java] Fix AST symbols for annotations & records #2793
- #2878 [java] Fix stackoverflow on nested anon ctor call #2878
- #3750 [java] Make symbol table support instanceof pattern bindings #3750
- #3752 [java] Expose annotations in symbol API #3752
- #3755 [java] Implement pattern binding scoping #3755
- #3763 [java] Ambiguous reference error in valid code #3763
- #3764 [java] Fix #3763 - ambiguity error #3764
- #3827 [java] Fix handling of classes with dollars in their names #3827
- #3839 [java] Remove old symtable #3839
- #4243 [java] Expose symbol annotations #4243
-
in:type-resolution
- #1124 [java] ImmutableList implementation in the qname codebase #1124
- #1207 [java] Resolve explicit types using FQCNs, without hitting the classloader #1207
- #2689 [java] New type resolution #2689
- #2819 [java] GLB bugs in pmd 7 #2819
- #3645 [java] SupertypeCheckCache - exclude also subtypes from caching #3645
- #3891 [java] Make type resolution not lazy #3891
- #3912 [java] Fix IndexOutOfBoundsException with lambda that has wrong shape #3912
- #4245 [java] Support for annotations in types #4245
-
in:pmd-internals
-
in:xpath
- Java Version Support
- Violation Suppressing
- unlabelled
- #1490 [java] Remove module java8 and merge tests into java #1490
- #1772 [java] Remove java statistical rules #1772
- #2324 [java] Remove old multifile implementation #2324
- #2665 [java] Name disambiguation in annotations #2665
- #2788 [java] Merge Java-grammar into 7.0.x #2788
- #3113 [java] Usage resolution for java variables #3113
- #3270 [java] Improve resilience to broken classpath #3270
- #3647 [java] Fixes for new regression tester errors #3647
- #3671 [java] Fix unused variable/field detection with unary expressions #3671
- #3842 [java] Move things from JavaRuleUtil to JavaAstUtils #3842
- #4238 [java] Make LawOfDemeter not use the rulechain #4238
- #4261 [java] Fix sonar build (pmd7) #4261
- #4276 [java] Add test for lambda in record compact constructor (pmd7) #4276
- Rule Changes
- Rule Updates for new grammar
- #2778 [java] Use ignore annotations for rule tests #2778
- #2794 [java] Update UnusedAssignmentRule to PMD 7 grammar #2794
- #2800 [java] Update MissingOverride to pmd 7 grammar #2800
- #2802 [java] Update comment rules for java #2802
- #2897 [java] Update UnnecessaryFullyQualifiedName #2897
- #2899 [java] Update many java rules #2899
- #2900 [java] Update UselessParentheses #2900
- #3086 [java] Update security rules for pmd7 #3086
- #3116 [java] Update a few more rules in bestpractices #3116
- #3126 [java] Update ForLoopCanBeForeach #3126
- #3127 [java] Update ArrayIsStoredDirectly and MethodReturnsInternalArray #3127
- #3171 [java] Update rule UseStringBufferForStringAppends #3171
- #3172 [java] Update rule UseIOStreamsWithApacheCommonsFileItem #3172
- #3176 [java] Update junit annotation rules #3176
- #3177 [java] Update rule LooseCoupling #3177
- #3178 [java] Update rule OneDeclarationPerLine #3178
- #3179 [java] Update rule PreserveStackTrace #3179
- #3180 [java] Update replace x with x rules #3180
- #3181 [java] Update rule UseTryWithResources #3181
- #3182 [java] Update rule UseVarargs #3182
- #3187 [java] Update rule UseArraysAsList #3187
- #3188 [java] Update CommentDefaultAccessModifier #3188
- #3189 [java] Update rule LinguisticNaming #3189
- #3191 [java] Update rule BrokenNullCheck #3191
- #3194 [java] Update rule UnnecessaryModifier #3194
- #3199 [java] Update rule PrematureDeclaration #3199
- #3204 [java] Update rule UnnecessaryCast, make it flag any unnecessary cast #3204
- #3227 [java] Update rule OnlyOneReturn #3227
- #3229 [java] Update FieldDeclarationsShouldBeAtStartOfClass #3229
- #3253 [java] Update rule UseDiamondOperator #3253
- #3271 [java] Update rule OptimizableToArrayCall #3271
- #3278 [java] Update rule InsufficientStringBufferDeclaration #3278
- #3297 [java] Update rule AvoidRethrowingException #3297
- #3298 [java] Update rule AbstractClassWithoutAnyMethod #3298
- #3308 [java] Update ExcessiveSomething rules #3308
- #3309 [java] Update DoNotExtendJavaLangError #3309
- #3310 [java] Update rule ExceptionAsFlowControl #3310
- #3311 [java] Extract reaching definitions analysis out of UnusedAssignmentRule #3311
- #3335 [java] Update rule ConsecutiveLiteralAppends #3335
- #3358 [java] Update ConstructorCallsOverridableMethod #3358
- #3364 [java] New rule UnnecessaryBoxing #3364
- #3381 [java] Update ReturnFromFinallyBlock #3381
- #3384 [java] Update many Java rules #3384
- #3386 [java] Update BigIntegerInstantiation #3386
- #3389 [java] Update rules Suspicious[Equals/Hashcode]MethodName #3389
- #3390 [java] Update rule IdempotentOperations #3390
- #3391 [java] Update rule DontImportSun #3391
- #3394 [java] Update rule AvoidInstantiatingObjectsInLoops #3394
- #3395 [java] Update rule AvoidCalendarDateCreation #3395
- #3396 [java] Update rule ComparisonWithNaN #3396
- #3397 [java] Update rule CollapsibleIfStatements #3397
- #3398 [java] Update rule AvoidUsingOctalValues #3398
- #3404 [java] Update ClassWithOnlyPrivateConstructorsShouldBeFinal #3404
- #3405 [java] Update AvoidUncheckedExceptionsInSignatures #3405
- #3408 [java] Update rule AvoidArrayLoops #3408
- #3418 [java] Update rule UnnecessaryWrapperObjectCreation #3418
- #3449 [java] Update rule SimplifyConditional #3449
- #3450 [java] Update rule SimplifiedTernary #3450
- #3457 [java] Update rule UseUtilityClass #3457
- #3458 [java] Update rule SwitchDensity #3458
- #3471 [java] Update ReturnFromFinallyBlock (follow up) #3471
- #3472 [java] Update rule UnsynchronizedStaticFormatter #3472
- #3473 [java] Update many Java rules (follow up) #3473
- #3474 [java] Update rule NonThreadSafeSingleton #3474
- #3477 [java] Update rule UseProperClassLoader #3477
- #3478 [java] Update rule UseLocaleWithCaseConversions #3478
- #3479 [java] Update rule UseEqualsToCompareStrings #3479
- #3483 [java] Update rule UseCorrectExceptionLogging #3483
- #3485 [java] Update rule UnusedNullCheckInEquals #3485
- #3510 [java] Update LawOfDemeter #3510
- #3511 [java] Update CheckSkipResult #3511
- #3512 [java] Update rule InvalidLogMessageFormat #3512
- #3522 [java] Update rule AvoidAccessibilityAlteration #3522
- #3523 [java] Update rule UnnecessaryConversionTemporary #3523
- #3524 [java] Update rule UnnecessaryCaseChange #3524
- #3525 [java] Update rule UnnecessaryBooleanAssertion #3525
- #3526 [java] Update rule UnconditionalIfStatement #3526
- #3527 [java] Update rule SuspiciousOctalEscape #3527
- #3528 [java] Update rule StringBufferInstantiationWithChar #3528
- #3529 [java] Update rule StaticEJBFieldShouldBeFinal #3529
- #3530 [java] Update rule SingletonClassReturningNewInstance #3530
- #3531 [java] Update rule SingleMethodSingleton #3531
- #3533 [java] Update rule ReturnEmptyCollectionRatherThanNull #3533
- #3534 [java] Update rule ProperCloneImplementation #3534
- #3535 [java] Update rule OverrideBothEqualsAndHashcode #3535
- #3536 [java] Update rule NonCaseLabelInSwitchStatement #3536
- #3537 [java] Update rule MissingStaticMethodInNonInstantiatableClass #3537
- #3545 [java] Update rule MisplacedNullCheck #3545
- #3546 [java] Update rule JumbledIncrementer #3546
- #3547 [java] Update rule DontUseFloatTypeForLoopIndices #3547
- #3548 [java] Update rule DoNotCallGarbageCollectionExplicitly #3548
- #3550 [java] Update rule CloseResource #3550
- #3552 [java] Update rule CloneMethodReturnTypeMustMatchClassName #3552
- #3553 [java] Update rule CloneMethodMustBePublic #3553
- #3556 [java] Update rule ClassCastExceptionWithToArray #3556
- #3591 [java] Update rule AvoidInstanceofChecksInCatchClause #3591
- #3592 [java] Update rule AvoidBranchingStatementAsLastInLoop #3592
- #3598 [java] Update rule AssignmentToNonFinalStatic #3598
- #3599 [java] Update rule UselessOverridingMethod #3599
- #3607 [java] Update rule LogicInversion #3607
- #3608 [java] Update rule FinalFieldCouldBeStatic #3608
- #3609 [java] Update rule PrimitiveWrapperInstantiation #3609
- #3610 [java] Update rule SimpleDateFormatNeedsLocale #3610
- #3611 [java] Update rule ProperLogger #3611
- #3649 [java] Update rule NullAssignment #3649
- #3650 [java] Update rule MoreThanOneLogger #3650
- #3651 [java] Update rule MethodWithSameNameAsEnclosingClass #3651
- #3652 [java] Update rule DoNotThrowExceptionInFinally #3652
- #3653 [java] Update rule DoNotHardCodeSDCard #3653
- #3654 [java] Update rule DoNotExtendJavaLangThrowable #3654
- #3655 [java] Update rule DetachedTestCase #3655
- #3658 [java] Update rules CallSuperFirst and CallSuperLast #3658
- #3659 [java] Update rule BeanMembersShouldSerialize #3659
- #3660 [java] Update rule AvoidLosingExceptionInformation #3660
- #3661 [java] Update rule AvoidLiteralsInIfCondition #3661
- #3662 [java] Update rules AvoidFieldNameMatching{Method,Type}Name #3662
- #3663 [java] Update rule AvoidDuplicateLiterals #3663
- #3664 [java] Update rule AvoidCatchingNPE #3664
- #3665 [java] Update rule AvoidCallingFinalize #3665
- #3715 [java] Update rule AvoidCatchingGenericException #3715
- #3717 [java] Update rule SimplifiableTestAssertion #3717
- #3718 [java] Update rule UnnecessaryImport #3718
- #3728 [java] Update rule UseObjectForClearerAPI #3728
- #3730 [java] Update rules TooManyMethods and TooManyFields #3730
- #3731 [java] Update rule SignatureDeclareThrowsException #3731
- #3733 [java] Update rule LoosePackageCoupling #3733
- #3734 [java] Update rule CouplingBetweenObjects #3734
- #3735 [java] Update rule AvoidThrowingRawExceptionTypes #3735
- #3736 [java] Update rule AvoidThrowingNewInstanceOfSameException #3736
- #3737 [java] Update rule AvoidDeeplyNestedIfStmts #3737
- #3738 [java] Update rule FinalParameterInAbstractMethod #3738
- #3739 [java] Update rule DoNotTerminateVM #3739
- #4221 [java] Implement rule NonSerializableClass (pmd7) #4221
- #4230 [java] New Rule InvalidJavaBean (pmd7) #4230
-
- Javascript
- JSP
- Kotlin
- #419 [kotlin] Add support for Kotlin #419 done
- #3808 [kotlin] Kotlin support #3808
- Matlab
- ObjectiveC
- PLSQL
- Python
- Scala
- Swift
- VM
- XML
- Apex
These are fixed on the pmd/7.0.x branch, but not closed yet. They should be on the release notes
- #342 [java] AccessorMethodGeneration: Name clash with another public field not properly handled #342
- #659 [java] MissingBreakInSwitch - last default case does not contain a break #659
- #755 [java] AccessorClassGeneration false positive for private constructors #755
- #770 [java] UnusedPrivateMethod yields false positive for counter-variant arguments #770
- #807 [java] AccessorMethodGeneration false positive with overloads #807
- #833 [java] ForLoopCanBeForeach should consider iterating on this #833
- #1005 [java] CloneMethodMustImplementCloneable triggers for interfaces #1005
- #1014 [java] LawOfDemeter: False positive with lambda expression #1014
- #1189 [java] UnusedPrivateMethod false positive from inner class via external class #1189
- #1208 [java] PrematureDeclaration rule false-positive on variable declared to measure time #1208
- #1212 [java] Don't raise JUnitTestContainsTooManyAsserts on JUnit 5's assertAll #1212
- #1224 [java] InefficientEmptyStringCheck false negative in anonymous class #1224
- #1422 [java] JUnitTestsShouldIncludeAssert false positive with inherited @Rule field #1422
- #1429 [java] PrematureDeclaration as result of method call (false positive) #1429
- #1565 [java] JUnitAssertionsShouldIncludeMessage false positive with AssertJ #1565
- #1605 [java] LawOfDemeter: False positive for standard UTF-8 charset name #1605
- #1669 [java] NullAssignment - FP with ternay and null as constructor argument #1669
- #1673 [java] UselessParentheses false positive with conditional operator #1673
- #1747 [java] PreserveStackTrace false-positive #1747
- #1790 [java] UnnecessaryFullyQualifiedName false positive with enum constant #1790
- #1899 [java] Recognize @SuppressWarnings("fallthrough") for MissingBreakInSwitch #1899
- #1918 [java] UselessParentheses false positive with boolean operators #1918
- #1969 [java] MissingOverride false-positive triggered by package-private method overwritten in another package by extending class. #1969
- #1998 [java] AccessorClassGeneration false-negative: subclass calls private constructor #1998
- #2130 [java] UnusedLocalVariable: false-negative with array #2130
- #2134 [java] PreserveStackTrace not handling Throwable.addSuppressed(...) #2134
- #2147 [java] JUnitTestsShouldIncludeAssert - false positives with lambdas and static methods #2147
- #2175 [java] LawOfDemeter: False positive for chained methods with generic method call #2175
- #2179 [java] LawOfDemeter: False positive with static property access - should treat class-level property as global object, not dot-accessed property #2179
- #2180 [java] LawOfDemeter: False positive with Thread and ThreadLocalRandom #2180
- #2182 [java] LawOfDemeter: False positive with package-private access #2182
- #2188 [java] LawOfDemeter: False positive with fields assigned to local vars #2188
- #2299 [java] UnnecessaryFullyQualifiedName false positive with similar package name #2299
- #2320 [java] NullAssignment - FP with ternary and null as method argument #2320
- #2391 [java] UseDiamondOperator FP when expected type and constructed type have a different parameterization #2391
- #2464 [java] LooseCoupling must ignore class literals: ArrayList.class #2464
- #2528 [java] MethodNamingConventions - JUnit 5 method naming not support ParameterizedTest #2528
- #2532 [java] AvoidDecimalLiteralsInBigDecimalConstructor can not detect the case new BigDecimal(Expression) #2532
- #2536 [java] ClassWithOnlyPrivateConstructorsShouldBeFinal can't detect inner class #2536
- #2537 [java] DontCallThreadRun can't detect the case that call run() in this.run() #2537
- #2538 [java] DontCallThreadRun can't detect the case that call run() in foo.bar.run() #2538
- #2542 [java] UseCollectionIsEmpty can not detect the case foo.bar().size() #2542
- #2577 [java] UseNotifyAllInsteadOfNotify falsely detect a special case with argument: foo.notify(bar) #2577
- #2579 [java] MissingBreakInSwitch detects the lack of break in the last case #2579
- #2587 [java] AvoidArrayLoops could also check for list copy through iterated List.add() #2587
- #2650 [java] UseTryWithResources false positive when AutoCloseable helper used #2650
- #2712 [java] AssertJ SimplifyStartsWith false-positive #2712
- #2739 [java] UselessParentheses false positive for string concatenation #2739
- #2748 [java] UnnecessaryCast false positive with unchecked cast #2748
- #2796 [java] UnusedAssignment false positive with call chains #2796
- #2797 [java] MissingOverride long-standing issues #2797
- #2806 [java] SwitchStmtsShouldHaveDefault false-positive with Java 14 switch non-fallthrough branches #2806
- #2822 [java] LooseCoupling rule: Extend to cover user defined implementations and interfaces #2822
- #2843 [java] Fix UnusedAssignment FP with field accesses #2843
- #2880 [java] CompareObjectsWithEquals - false negative with type res #2880
- #2882 [java] UseTryWithResources - false negative for explicit close #2882
- #2883 [java] JUnitAssertionsShouldIncludeMessage false positive with method call #2883
- #2890 [java] UnusedPrivateMethod false positive with generics #2890
- #2893 [java] Remove special cases from rule EmptyCatchBlock #2893
- #2894 [java] Improve MissingBreakInSwitch #2894
- #2946 [java] SwitchStmtsShouldHaveDefault false positive on enum inside enums #2946
- #3071 [java] BrokenNullCheck FP with PMD 6.30.0 #3071
- #3087 [java] UnnecessaryBooleanAssertion overlaps with SimplifiableTestAssertion #3087
- #3100 [java] UseCorrectExceptionLogging FP in 6.31.0 #3100
- #3173 [java] UseProperClassLoader false positive #3173
- #3195 [java] Improve rule UnnecessaryReturn to detect more cases #3195
- #3218 [java] Generalize UnnecessaryCast to flag all unnecessary casts #3218
- #3221 [java] PrematureDeclaration false positive for unused variables #3221
- #3238 [java] Improve ExprContext, fix FNs of UnnecessaryCast #3238
- #3351 [java] ConstructorCallsOverridableMethod ignores abstract methods #3351
- #3400 [java] AvoidUsingOctalValues FN with underscores #3400
- #3486 [java] InsufficientStringBufferDeclaration: Fix NPE #3486
- #3500 [java] UnnecessaryBoxing - check for Integer.valueOf(String) calls #3500
- #3668 [java] ClassWithOnlyPrivateConstructorsShouldBeFinal - fix FP with inner private classes #3668
- #3672 [java] LooseCoupling - fix false positive with generics #3672
- #3675 [java] MissingOverride - fix false positive with mixing type vars #3675
- #3754 [java] SingularField false positive with read in while condition #3754
- #3756 [java] Fix #3754 singularfield fp #3756
- #3786 [java] SimplifyBooleanReturns should consider operator precedence #3786
- #3795 [java] Fix #3786 - make SimplifyBooleanReturns consider parentheses. #3795
See PMD 7 Tracking Issue #3898 for the current status.
- API / Core
-
in:autofixes
-
in:ast
-
in:cli
- #1763 [core] CPD: supporting regular expression for "--exclude" option #1763
- #1995 [core] PMD should display number of rules violated or errors found #1995
- #2087 [core] Allow to specify command line options via properties file #2087
- #2947 [core] Language properties CLI surface syntax #2947
- #3913 [cli] Disable progress bar when running in non-interactive mode #3913
- #4069 [core] --short-names option is broken in PMD 7 #4069
-
in:cpd
-
in:grammar
-
in:pmd-internals
-
in:ruleset-xml
- #2227 [core] Format of message attribute should be checked early #2227
- #3868 [core] Simplify and improve rule configuration validation #3868
- #4315 [core] Implement new ruleset schema #4315
- #4330 [core] Implement strict ruleset parsing #4330
- #4331 [core] Support sharing properties across mutliple rules #4331
-
in:testing
- Property API
- #1204 [core] Allow numeric properties to be within an unbounded range #1204
- #3869 [core] Turn PropertySource into PropertyBundle #3869
- #4302 [core] Migrate Property Framework API to Java 8 #4302
- #4304 [core] Implement blank properties #4304
- #4305 [core] New property syntax in XML #4305
- #4306 [core] Add additional property value validations #4306
- Rule API
- Error Handling and Reporting
- Renderer and Reporting and Violation API
- General Language Plugin Support
- unlabelled
- #237 [core] RFC: Analyzing embedded snippets from other languages #237
- #494 [core] Adopt JApiCmp to enforce control over API changes #494
- #1540 [pom] Maven POM Rules don't check files named "pom.xml" #1540
- #2163 [core] Classloader not being closed after PMD run #2163
- #2873 [core] Utility classes in pmd 7 #2873
-
-
in:documentation
- User Documentation
- #893 [doc] Improve documentation for Suppression #893
- #2506 [doc] Improve Landing Page pmd.github.io #2506
- #2507 [doc] Improve our index for newcomers #2507
- #2508 [doc] Create a Getting started series to replace the getting-started panel #2508
- #2509 [doc] Create/rework FAQ page #2509
- #2516 [doc] Using the benchmarking feature of PMD #2516
- #4216 [plsql] Document DBURI data source possibility #4216
- #4292 [doc] Update Project Documentation #4292
- #4293 [doc] Short project history #4293
- Developer Documentation
- #906 [doc] Provide step-by-step guides to enhance PMD #906
- #2433 [doc] Further (java)doc improvements #2433
- #2492 [doc] Promote wiki pages to standard doc pages #2492
- #2510 [doc] Rework rule guidelines #2510
- #2512 [doc] Review documentation for features and usage of the designer for correctness with PMD 7 #2512
- #2517 [doc] Provide a high-level overview of PMD's building blocks #2517
- #4324 [doc] Update roadmap document #4324
- #4347 [doc] Document usage of checker-qual @Nullable as ADR #4347
- General Doc Improvements
- Rule Documentation
- #1335 [core] questions for getting all ruleset #1335
- #1765 [java] Add references to CWE issues on applicable rules #1765
- #4288 [java] Document that CallSuperFirst/CallSuperLast are Android specific #4288
- #4295 [doc] Generate a complete rule catalog in a machine-readable format #4295
- #4296 [doc] Create a simple online Ruleset Editor #4296
- #4297 [doc] Produce example configs for rule properties #4297
- #4298 [doc] Improve rule index #4298
- #4299 [doc] Provide use-case based default rulesets #4299
- User Documentation
-
in:xpath
- #1170 [core] Make boolean XPath attributes accessible with their prefix #1170
- #1676 [core] Select XPath version in violationSuppressXPath #1676
- #1787 [core] Match abstract types in XPath queries #1787
- #2217 [core] Generate XSD for attributes and elements exposed through XPath #2217
- #4338 [xpath] Custom XPath attributes for ANTLR based languages #4338
- Miscellaneous
- Languages
- Apex
-
in:ast
- Rule Changes
-
- Java
-
in:cli
-
in:symbol-table
- #1548 [java] Instantiation rules cannot tell apart java.lang primitive wrappers and same named classes #1548
- #1780 [java] Error while processing class when super constructor is called from static inner class #1780
- #4316 [java] Expose permitted subclasses in symbol API #4316
- #4334 [java] Symbol API Annotation support completeness #4334
- #4335 [java] Symbol API language completeness #4335
-
in:type-resolution
- #913 [java] Incorrect type resolution with classes having the same name #913
- #2743 [java] False positive violation of SwitchStmtsShouldHaveDefault when using local variable inference #2743
- #3083 [java] False positive for rule UnnecessaryFullyQualifiedName: Shadowed static method import not handled #3083
- #3119 [java] Better Lombok support #3119
- #3646 [java] Type resolution error with deeply nested lambda #3646
- Violation Suppressing
- New Rule Suggestions
- #1034 [java] New rules around Optional usage for Java 8 #1034
- #2023 [java] Lossy conversion needs to be flagged in Java code #2023
- #2849 [java] Missing @FunctionalInterface #2849
- #2926 [java] Replace UseConcurrentHashMap with UseConcurrentCollection #2926
- #3216 [java] New rule: UnnecessaryVarargsArrayCreation #3216
- #3228 [java] Replace FieldDeclarationsShouldBeAtStartOfClass with GroupInitializationLogic #3228
- #3776 [java] New rule: AssertStatementWithSideEffect #3776
- Rule Improvements
- #2197 [java] Make SystemPrintln configurable #2197
- #3122 [java] LocalVariableCouldBeFinal should consider blank local variables #3122
- #3124 [java] UnnecessaryLocalBeforeReturn - remove property statementOrderMatters #3124
- #3192 [java] Improve UseArraysAsList #3192
- #3212 [java] Enhance UseStandardCharsets to flag some constructors of IO-related classes #3212
- #3219 [java] Make UnnecessaryCast check casts in invocation contexts #3219
- #3353 [java] UseDiamondOperator misses a few reports where diamond could be used #3353
- #3362 [java] MissingBreakInSwitch should consider switch expressions #3362
- #3748 [java] Make UnnecessaryImport handle unresolved static imports more gracefully #3748
- #4289 [java] Improve ForLoopCanBeForeach to use StablePathMatcher #4289
- #4290 [java] Improve UseStringBufferForStringAppends to report on variable declaration #4290
- Rule Mergers and Renamings
- #2892 [java] Merge AccessorClassGeneration and AccessorMethodGeneration #2892
- #2972 [java] Merge unused declaration rules #2972
- #2974 [java] Merge rules about protected in final class #2974
- #3273 [java] Rename rule UseDiamondOperator to UnnecessaryTypeArguments #3273
- #3459 [java] Rename rule SimplifyConditional #3459
- #4286 [java] Rename rule SwitchStmtsShouldHaveDefault to NonExhaustiveSwitchStatement #4286
- #4287 [java] Rename rule MethodArgumentCouldBeFinal to FormalParameterCouldBeFinal #4287
- Rule Deprecations - to be done on pmd6...
- #3217 [java] Deprecate rule UseVarargs #3217 - on pmd6
- #3295 [java] Deprecate AvoidDeeplyNestedIfStmts #3295 - on pmd6
- #3741 [java] Deprecate UseObjectForClearerAPI #3741 - on pmd6
- unlabelled
-
- PHP
- PLSQL
-
in:grammar
- unlabelled
-
- Kotlin
- Scala
- Apex
-
pmd/pmd.github.io
- Branch:
pmd7
- Branch:
-
pmd/designer
- Branch:
compat-7.0
- #43 Update PMD 7 Logo in the Designer #43
- Branch:
-
pmd/pmd-eclipse-plugin
- Branch: no branch yet ❓
- #122 Update PMD 7 Logo in eclipse pmd plugin #122
-
pmd/pmd-examples
- Branch: no branch yet ❓
-
apache/maven-pmd-plugin
- Branch:
pmd7
- Branch:
- doc: architecture decision - checker-qual, when to use
@Nullable
, when to useOptional
. - doc: Use Java Clean Changes
- doc: Issue triage documentation (howto) -> [doc] Update Project Documentation #4292
- check for:
@Experimental
,@Deprecated
,@DeprecatedUntil700
- maybe move
@InternalApi
intointernal
packages
Release candidates are a step towards a complete release. RCs allow e.g. users to test the version. RCs are real and complete releases, just the version number contains the "RC" suffix.
Release candidates:
- are a finished milestone, but not everything is completed yet
- provide a way to already update and use PMD 7 downstream (e.g. to test integrations)
Topic: Finish open PRs and finish Java module
Topic: Finish Documentation
Topic: Cleanup, Release Notes, Prepare dependant projects