From b45de73fb64c200ca92ec57abc4ad8cba0e76263 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Wed, 1 Dec 2021 12:29:36 +0100 Subject: [PATCH] [java] ClassWithOnlyPrivateConstructorsShouldBeFinal - exclude abstract classes --- ...WithOnlyPrivateConstructorsShouldBeFinalRule.java | 3 ++- ...ClassWithOnlyPrivateConstructorsShouldBeFinal.xml | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ClassWithOnlyPrivateConstructorsShouldBeFinalRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ClassWithOnlyPrivateConstructorsShouldBeFinalRule.java index 85720dedc4..4efdfe5871 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ClassWithOnlyPrivateConstructorsShouldBeFinalRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ClassWithOnlyPrivateConstructorsShouldBeFinalRule.java @@ -9,6 +9,7 @@ import static net.sourceforge.pmd.lang.java.ast.AccessNode.Visibility.V_PRIVATE; import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; +import net.sourceforge.pmd.lang.java.ast.JModifier; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRulechainRule; import net.sourceforge.pmd.lang.java.types.TypeTestUtil; @@ -21,7 +22,7 @@ public class ClassWithOnlyPrivateConstructorsShouldBeFinalRule extends AbstractJ @Override public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { if (node.isRegularClass() - && !node.isFinal() + && !node.getModifiers().hasAny(JModifier.FINAL, JModifier.ABSTRACT) && hasOnlyPrivateCtors(node) && hasNoSubclasses(node)) { addViolation(data, node); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ClassWithOnlyPrivateConstructorsShouldBeFinal.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ClassWithOnlyPrivateConstructorsShouldBeFinal.xml index fe66fa1313..00e95e2cc8 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ClassWithOnlyPrivateConstructorsShouldBeFinal.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ClassWithOnlyPrivateConstructorsShouldBeFinal.xml @@ -159,4 +159,16 @@ class ClassWithOnlyPrivateConstructorsShouldBeFinal { } ]]> + + + Private abstract classes should be ignored + 0 + +