Skip to content

[java] Fix #6965: AbstractClassWithoutAnyMethod false positive on derived abstract class - #6972

Merged
UncleOwen merged 5 commits into
pmd:mainfrom
AzazelSensei:fix/abstract-class-without-any-method-6965
Aug 15, 2026
Merged

UncleOwen merged 5 commits into
pmd:mainfrom
AzazelSensei:fix/abstract-class-without-any-method-6965

Conversation

@AzazelSensei

@AzazelSensei AzazelSensei commented Aug 13, 2026 •

Copy link
Copy Markdown
Contributor

Describe the PR

AbstractClassWithoutAnyMethod flags an empty abstract class even when it extends a type that already has abstract methods. That class has to stay abstract, so the usual "use a private constructor" advice does not apply.

The XPath now skips classes with an ExtendsList, same idea as AbstractClassWithoutAbstractMethod.

Related issues

Ready?

  • Added unit tests for fixed bug/feature
  • Passing all unit tests
  • Complete build ./mvnw clean verify passes (checked automatically by github actions)
  • Added (in-code) documentation (if needed)

@pmd-actions-helper

pmd-actions-helper Bot commented Aug 13, 2026 •

Copy link
Copy Markdown
Contributor

Documentation Preview

Compared to main:
This changeset changes 0 violations,
introduces 0 new violations, 0 new errors and 0 new configuration errors,
removes 26 violations, 16 errors and 0 configuration errors.
There are 0 changed duplications, 0 new duplications and 0 removed duplications.
There are 0 changed CPD errors, 0 new CPD errors and 0 removed CPD errors.

Regression Tester Report

(comment created at 2026-08-15 11:47:28+00:00 for ba43cf3)

An empty abstract class that extends another type cannot be replaced
with a private constructor when the parent already declares abstract
methods. Skip those subclasses.

Fixes pmd#6965
The two cases were the same ExtendsList skip. Keep the reporter sample.
Fold not(ExtendsList) into the existing predicate so design.xml line numbers stay put.
@AzazelSensei
AzazelSensei force-pushed the fix/abstract-class-without-any-method-6965 branch from 56b6b08 to c5b2ef8 Compare August 14, 2026 11:36
@AzazelSensei

Copy link
Copy Markdown
Contributor Author

Rebased onto main. Only clash was the changelog — kept both entries.

@UncleOwen UncleOwen added this to the 7.27.0 milestone Aug 15, 2026

@UncleOwen UncleOwen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@UncleOwen
UncleOwen merged commit 41f4fb2 into pmd:main Aug 15, 2026
13 checks passed
@adangel adangel changed the title [java] AbstractClassWithoutAnyMethod false positive on derived abstract class [java] Fix #6965: AbstractClassWithoutAnyMethod false positive on derived abstract class Aug 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants