diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryModifierRule.java index 1e68bc0ec4..a9cf5f405e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryModifierRule.java @@ -24,6 +24,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodOrConstructorDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTRecordDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTResource; import net.sourceforge.pmd.lang.java.ast.AccessNode; import net.sourceforge.pmd.lang.java.ast.internal.PrettyPrintingUtil; @@ -42,6 +43,7 @@ public class UnnecessaryModifierRule extends AbstractJavaRule { addRuleChainVisit(ASTFieldDeclaration.class); addRuleChainVisit(ASTAnnotationMethodDeclaration.class); addRuleChainVisit(ASTConstructorDeclaration.class); + addRuleChainVisit(ASTRecordDeclaration.class); } @@ -264,6 +266,14 @@ public class UnnecessaryModifierRule extends AbstractJavaRule { return data; } + @Override + public Object visit(ASTRecordDeclaration node, Object data) { + if (node.isStatic()) { + reportUnnecessaryModifiers(data, node, Modifier.STATIC, "record are implicitly static"); + } + return data; + } + private boolean isSafeVarargs(final ASTMethodDeclaration node) { return node.isAnnotationPresent(SafeVarargs.class.getName()); diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 4c506e3b9f..cca8c46882 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -2062,6 +2062,12 @@ public class Bar { FOO; } } +public class FooClass { + static record BarRecord() {} // static ignored +} +public interface FooInterface { + static record BarRecord() {} // static ignored +} ]]> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryModifier.xml index d1d7be5511..53b525f769 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryModifier.xml @@ -695,6 +695,52 @@ public interface Bar { void method() { } static class Foo {} +} + ]]> + + + + Static is not necessary in class + 1 + + Unnecessary modifier 'static' on record 'BarRecord': record are implicitly static + + + + + + Correct nested record declaration in classes + 0 + + + + + Static is not necessary in interface + 1 + + Unnecessary modifier 'static' on record 'BarRecord': record are implicitly static + + + + + + Correct nested record declaration in interface + 0 +