[java] ClassWithOnlyPrivateConstructorsShouldBeFinal - exclude abstract

classes
This commit is contained in:
Andreas Dangel committed 2021-12-01 12:29:36 +01:00
1 parent f36b99fbd7
commit b45de73fb6
2 files changed
+14 -1

No files matched your search

@@ -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);
@@ -159,4 +159,16 @@ class ClassWithOnlyPrivateConstructorsShouldBeFinal {
}
]]></code>
</test-code>
<test-code>
<description>Private abstract classes should be ignored</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
public class Outer {
private abstract class Base {
abstract void run();
}
}
]]></code>
</test-code>
</test-data>