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++;
+ }
+ }
}