From b097b3f002ca40474b729c27c531787bc2e79f04 Mon Sep 17 00:00:00 2001 From: Baratali Izmailov Date: Sun, 2 Aug 2015 02:15:07 -0700 Subject: [PATCH] Issue #1293: Improved coverage for FinalLocalVariableCheck --- pom.xml | 1 - .../coding/FinalLocalVariableCheck.java | 5 +++-- .../coding/FinalLocalVariableCheckTest.java | 19 +++++++++++++++++++ .../coding/InputFinalLocalVariable.java | 8 ++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 61c1fa009..5f3168388 100644 --- a/pom.xml +++ b/pom.xml @@ -1097,7 +1097,6 @@ .*.checks.UniquePropertiesCheck\$.*7590 .*.checks.coding.DeclarationOrderCheck8293 - .*.checks.coding.FinalLocalVariableCheck96100 .*.checks.coding.IllegalInstantiationCheck8197 .*.checks.coding.ReturnCountCheck5574 .*.checks.coding.VariableDeclarationUsageDistanceCheck9098 diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java index 7e448f68d..904db6bbd 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java @@ -189,7 +189,7 @@ public class FinalLocalVariableCheck extends Check { break; case TokenTypes.VARIABLE_DEF: if (ast.getParent().getType() != TokenTypes.OBJBLOCK - && isVariableInForInit(ast) + && !isVariableInForInit(ast) && shouldCheckEnhancedForLoopVariable(ast) && !ast.branchContains(TokenTypes.FINAL)) { insertVariable(ast); @@ -205,6 +205,7 @@ public class FinalLocalVariableCheck extends Check { break; default: + throw new IllegalStateException("Incorrect token type"); } } @@ -240,7 +241,7 @@ public class FinalLocalVariableCheck extends Check { * @return true if variable is defined in {@link TokenTypes#FOR_INIT for-loop init} */ private static boolean isVariableInForInit(DetailAST variableDef) { - return variableDef.getParent().getType() != TokenTypes.FOR_INIT; + return variableDef.getParent().getType() == TokenTypes.FOR_INIT; } /** diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheckTest.java index 42417b398..9a37ba067 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheckTest.java @@ -23,10 +23,13 @@ import static com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCh import java.io.File; +import org.junit.Assert; import org.junit.Test; import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; public class FinalLocalVariableCheckTest extends BaseCheckTestSupport { @@ -145,4 +148,20 @@ public class FinalLocalVariableCheckTest }; verify(checkConfig, getPath("coding/InputFinalLocalVariableNameShadowing.java"), expected); } + + @Test + public void testImproperToken() throws Exception { + FinalLocalVariableCheck check = new FinalLocalVariableCheck(); + + DetailAST lambdaAst = new DetailAST(); + lambdaAst.setType(TokenTypes.LAMBDA); + + try { + check.visitToken(lambdaAst); + Assert.fail(); + } + catch (IllegalStateException e) { + // it is OK + } + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFinalLocalVariable.java b/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFinalLocalVariable.java index 1ba7f64c0..b892aa8ff 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFinalLocalVariable.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFinalLocalVariable.java @@ -163,3 +163,11 @@ class class1 } } + +class A { + { + int y = 0; + y = 9; + } +} +