diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 2e8906b73f..2e6b92527b 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -25,6 +25,8 @@ This is a {{ site.pmd.release_type }} release. * [#3614](https://github.com/pmd/pmd/issues/3614): \[java] JUnitTestsShouldIncludeAssert doesn't consider nested classes * [#3618](https://github.com/pmd/pmd/issues/3618): \[java] UnusedFormalParameter doesn't consider anonymous classes * [#3630](https://github.com/pmd/pmd/issues/3630): \[java] MethodReturnsInternalArray doesn't consider anonymous classes +* java-design + * [#3620](https://github.com/pmd/pmd/issues/3620): \[java] SingularField doesn't consider anonymous classes defined in non-private fields * java-errorprone * [#3624](https://github.com/pmd/pmd/issues/3624): \[java] TestClassWithoutTestCases reports wrong classes in a file * java-performance diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java index e82d04763f..9c57f01a80 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java @@ -74,16 +74,16 @@ public class SingularFieldRule extends AbstractLombokAwareRule { boolean disallowNotAssignment = getProperty(DISALLOW_NOT_ASSIGNMENT); if (!node.isPrivate() || node.isStatic()) { - return data; + return super.visit(node, data); } if (hasClassLombokAnnotation() || hasIgnoredAnnotation(node)) { - return data; + return super.visit(node, data); } // lombok.EqualsAndHashCode is a class-level annotation if (hasIgnoredAnnotation((Annotatable) node.getFirstParentOfType(ASTAnyTypeDeclaration.class))) { - return data; + return super.visit(node, data); } for (ASTVariableDeclarator declarator : node.findChildrenOfType(ASTVariableDeclarator.class)) { @@ -194,7 +194,7 @@ public class SingularFieldRule extends AbstractLombokAwareRule { addViolation(data, node, new Object[] { declaration.getImage() }); } } - return data; + return super.visit(node, data); } private boolean isInAssignment(Node potentialStatement) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SwitchDensityRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SwitchDensityRule.java index 3299c585d1..8567fef925 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SwitchDensityRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SwitchDensityRule.java @@ -51,7 +51,6 @@ public class SwitchDensityRule extends AbstractStatisticalJavaRule { } public SwitchDensityRule() { - super(); setProperty(MINIMUM_DESCRIPTOR, 10d); } @@ -65,7 +64,7 @@ public class SwitchDensityRule extends AbstractStatisticalJavaRule { SwitchDensity density = new SwitchDensity(); - node.childrenAccept(this, density); + super.visit(node, density); DataPoint point = new DataPoint(); point.setNode(node); @@ -86,9 +85,7 @@ public class SwitchDensityRule extends AbstractStatisticalJavaRule { ((SwitchDensity) data).addStatement(); } - statement.childrenAccept(this, data); - - return data; + return super.visit(statement, data); } @Override @@ -97,7 +94,6 @@ public class SwitchDensityRule extends AbstractStatisticalJavaRule { ((SwitchDensity) data).addSwitchLabel(); } - switchLabel.childrenAccept(this, data); - return data; + return super.visit(switchLabel, data); } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidMultipleUnaryOperatorsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidMultipleUnaryOperatorsRule.java index be73e9f279..5ca3e3f5fb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidMultipleUnaryOperatorsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidMultipleUnaryOperatorsRule.java @@ -15,8 +15,8 @@ import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; public class AvoidMultipleUnaryOperatorsRule extends AbstractJavaRule { public AvoidMultipleUnaryOperatorsRule() { - super.addRuleChainVisit(ASTUnaryExpression.class); - super.addRuleChainVisit(ASTUnaryExpressionNotPlusMinus.class); + addRuleChainVisit(ASTUnaryExpression.class); + addRuleChainVisit(ASTUnaryExpressionNotPlusMinus.class); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidUsingOctalValuesRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidUsingOctalValuesRule.java index c91705bfe2..bf21173584 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidUsingOctalValuesRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidUsingOctalValuesRule.java @@ -27,6 +27,7 @@ public class AvoidUsingOctalValuesRule extends AbstractJavaRule { public AvoidUsingOctalValuesRule() { definePropertyDescriptor(STRICT_METHODS_DESCRIPTOR); + addRuleChainVisit(ASTLiteral.class); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CheckSkipResultRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CheckSkipResultRule.java index 3b5710f780..bf12f843ee 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CheckSkipResultRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CheckSkipResultRule.java @@ -19,6 +19,10 @@ import net.sourceforge.pmd.lang.symboltable.NameOccurrence; public class CheckSkipResultRule extends AbstractJavaRule { + public CheckSkipResultRule() { + addRuleChainVisit(ASTVariableDeclaratorId.class); + } + @Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (!TypeTestUtil.isA(InputStream.class, node.getTypeNode())) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml index 4702f1dd2e..09496df92f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml @@ -7,16 +7,17 @@ failure case 1 + 3 @@ -190,6 +191,7 @@ public class Foo { Reuse variable name as params in method calls 1 + 2 failure, static 1 + 2 failure, second method re-uses class level name 1 + 2 1409944, fields not used to synchronize should trigger 1 + 3 Not ok, since inner classes are checked true 1 + 3 Not ok, violation with first usage = non-assignment true 1 + 2 multiple fields on same line 1 + 2 [java] SingularField: Lombok false positive with annotated inner class 1 + 9 + + + failure case with anonymous class + 4 + 4,13,20,23 + + diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SwitchDensity.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SwitchDensity.xml index 8d3c5fc1e2..c1f09d441f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SwitchDensity.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SwitchDensity.xml @@ -8,6 +8,7 @@ Five stmts in one switch case, should be flagged 4 1 + 4 failure case 1 + 8 failure case but obfuscated 1 + 8