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
+