From 0c0f124c40729c436036703ec78b2ae5d95ff9d3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 28 Oct 2021 15:58:43 +0200 Subject: [PATCH] [java] Update rule AvoidBranchingStatementAsLastInLoop --- .ci/files/all-java.xml | 2 +- ...AvoidBranchingStatementAsLastInLoopRule.java | 17 +++++------------ ...AvoidBranchingStatementAsLastInLoopTest.java | 1 - .../xml/AvoidBranchingStatementAsLastInLoop.xml | 15 ++++++++++++++- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/.ci/files/all-java.xml b/.ci/files/all-java.xml index c6bd180f68..e0e9946b1a 100644 --- a/.ci/files/all-java.xml +++ b/.ci/files/all-java.xml @@ -174,7 +174,7 @@ - + diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopRule.java index b7348aa26f..1d6f66afd1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopRule.java @@ -20,12 +20,11 @@ import net.sourceforge.pmd.lang.java.ast.ASTForStatement; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; import net.sourceforge.pmd.lang.java.ast.ASTSwitchStatement; import net.sourceforge.pmd.lang.java.ast.ASTWhileStatement; -import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; +import net.sourceforge.pmd.lang.java.rule.AbstractJavaRulechainRule; import net.sourceforge.pmd.properties.PropertyDescriptor; import net.sourceforge.pmd.properties.PropertyFactory; -import net.sourceforge.pmd.properties.PropertySource; -public class AvoidBranchingStatementAsLastInLoopRule extends AbstractJavaRule { +public class AvoidBranchingStatementAsLastInLoopRule extends AbstractJavaRulechainRule { public static final String CHECK_FOR = "for"; public static final String CHECK_DO = "do"; @@ -53,20 +52,17 @@ public class AvoidBranchingStatementAsLastInLoopRule extends AbstractJavaRule { public AvoidBranchingStatementAsLastInLoopRule() { + super(ASTBreakStatement.class, ASTContinueStatement.class, ASTReturnStatement.class); definePropertyDescriptor(CHECK_BREAK_LOOP_TYPES); definePropertyDescriptor(CHECK_CONTINUE_LOOP_TYPES); definePropertyDescriptor(CHECK_RETURN_LOOP_TYPES); - - addRuleChainVisit(ASTBreakStatement.class); - addRuleChainVisit(ASTContinueStatement.class); - addRuleChainVisit(ASTReturnStatement.class); } @Override public Object visit(ASTBreakStatement node, Object data) { // skip breaks, that are within a switch statement - if (node.getNthParent(3) instanceof ASTSwitchStatement) { + if (node.ancestors().get(1) instanceof ASTSwitchStatement) { return data; } return check(CHECK_BREAK_LOOP_TYPES, node, data); @@ -74,7 +70,7 @@ public class AvoidBranchingStatementAsLastInLoopRule extends AbstractJavaRule { protected Object check(PropertyDescriptor> property, Node node, Object data) { - Node parent = node.getNthParent(5); + Node parent = node.ancestors().get(1); if (parent instanceof ASTForStatement) { if (hasPropertyValue(property, CHECK_FOR)) { super.addViolation(data, node); @@ -109,9 +105,6 @@ public class AvoidBranchingStatementAsLastInLoopRule extends AbstractJavaRule { } - /** - * @see PropertySource#dysfunctionReason() - */ @Override public String dysfunctionReason() { return checksNothing() ? "All loop types are ignored" : null; diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopTest.java index 3a266f5964..3628a5de05 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidBranchingStatementAsLastInLoopTest.java @@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.errorprone; import net.sourceforge.pmd.testframework.PmdRuleTst; -@org.junit.Ignore("Rule has not been updated yet") public class AvoidBranchingStatementAsLastInLoopTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidBranchingStatementAsLastInLoop.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidBranchingStatementAsLastInLoop.xml index 69f5b69865..6f5bbf7650 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidBranchingStatementAsLastInLoop.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidBranchingStatementAsLastInLoop.xml @@ -101,6 +101,7 @@ public class Foo { violations: break:for/do/while, continue:for/do/while and return:for/do/while 9 + 5,8,11,14,17,20,23,26,29 @@ -110,6 +111,7 @@ public class Foo { 3 + 8,17,26 @@ -119,6 +121,7 @@ public class Foo { for|do|while 3 + 11,20,29 @@ -128,6 +131,7 @@ public class Foo { for|do|while 3 + 5,14,23 @@ -137,6 +141,7 @@ public class Foo { 1 + 8 @@ -146,6 +151,7 @@ public class Foo { 1 + 26 @@ -155,6 +161,7 @@ public class Foo { 1 + 17 @@ -164,6 +171,7 @@ public class Foo { for 1 + 11 @@ -173,6 +181,7 @@ public class Foo { do 1 + 29 @@ -182,6 +191,7 @@ public class Foo { while 1 + 20 @@ -191,6 +201,7 @@ public class Foo { for 1 + 5 @@ -200,6 +211,7 @@ public class Foo { do 1 + 23 @@ -209,6 +221,7 @@ public class Foo { while 1 + 14 @@ -217,7 +230,7 @@ public class Foo { 0