diff --git a/.ci/pitest-suppressions/pitest-coding-1-suppressions.xml b/.ci/pitest-suppressions/pitest-coding-1-suppressions.xml index e3bb01fbde1..2e194f1a2e1 100644 --- a/.ci/pitest-suppressions/pitest-coding-1-suppressions.xml +++ b/.ci/pitest-suppressions/pitest-coding-1-suppressions.xml @@ -144,15 +144,6 @@ else if (isChild(currentNode, variable)) { - - VariableDeclarationUsageDistanceCheck.java - com.puppycrawl.tools.checkstyle.checks.coding.VariableDeclarationUsageDistanceCheck - getFirstNodeInsideIfBlock - org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_ELSE - removed conditional - replaced equality check with false - else if (isChild(currentNode, variable)) { - - VariableDeclarationUsageDistanceCheck.java com.puppycrawl.tools.checkstyle.checks.coding.VariableDeclarationUsageDistanceCheck @@ -162,15 +153,6 @@ if (currentNode.getType() == TokenTypes.LITERAL_IF) { - - VariableDeclarationUsageDistanceCheck.java - com.puppycrawl.tools.checkstyle.checks.coding.VariableDeclarationUsageDistanceCheck - getFirstNodeInsideIfBlock - org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_ELSE - removed conditional - replaced equality check with false - if (currentNode.getType() == TokenTypes.LITERAL_IF) { - - VariableDeclarationUsageDistanceCheck.java com.puppycrawl.tools.checkstyle.checks.coding.VariableDeclarationUsageDistanceCheck diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheck.java index 01b38a36690..269ebc67646 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheck.java @@ -763,11 +763,9 @@ private static DetailAST getFirstNodeInsideIfBlock( if (!isVariableInOperatorExpr(block, variable)) { DetailAST currentNode = block.getLastChild(); - final List variableUsageExpressions = - new ArrayList<>(); + final List variableUsageExpressions = new ArrayList<>(); - while (currentNode != null - && currentNode.getType() == TokenTypes.LITERAL_ELSE) { + if (currentNode.getType() == TokenTypes.LITERAL_ELSE) { final DetailAST previousNode = currentNode.getPreviousSibling(); @@ -778,20 +776,14 @@ private static DetailAST getFirstNodeInsideIfBlock( // Looking into ELSE block, get its first child and analyze it. currentNode = currentNode.getFirstChild(); - - if (currentNode.getType() == TokenTypes.LITERAL_IF) { - currentNode = currentNode.getLastChild(); - } - else if (isChild(currentNode, variable)) { - variableUsageExpressions.add(currentNode); - currentNode = null; - } } // If IF block doesn't include ELSE then analyze variable usage // only inside IF block. - if (currentNode != null - && isChild(currentNode, variable)) { + // OR + // The IF block contained ELSE and currentNode is equal to the first child in + // ELSE block, then also analyze the first child. + if (isChild(currentNode, variable)) { variableUsageExpressions.add(currentNode); } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheckTest.java index bf2f3250dcf..aab4c75250e 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/VariableDeclarationUsageDistanceCheckTest.java @@ -86,6 +86,7 @@ public void testGeneralLogic2() throws Exception { "17:9: " + getCheckMessage(MSG_KEY, "first", 5, 1), "29:9: " + getCheckMessage(MSG_KEY, "allInvariants", 2, 1), "59:9: " + getCheckMessage(MSG_KEY, "a", 2, 1), + "68:9: " + getCheckMessage(MSG_KEY, "a", 4, 1), }; verifyWithInlineConfigParser( getPath("InputVariableDeclarationUsageDistanceGeneral2.java"), expected); diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/variabledeclarationusagedistance/InputVariableDeclarationUsageDistanceGeneral2.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/variabledeclarationusagedistance/InputVariableDeclarationUsageDistanceGeneral2.java index d361ad7216d..4ad0a3e6395 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/variabledeclarationusagedistance/InputVariableDeclarationUsageDistanceGeneral2.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/variabledeclarationusagedistance/InputVariableDeclarationUsageDistanceGeneral2.java @@ -63,4 +63,14 @@ void method() throws Exception { a.equals(""); } } + + void method2() { + int a = 12; // violation + if (true) { + method2(); + p(); + method2(); + a++; + } + } }