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 5fc4fb8ce..a712653b7 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 @@ -156,7 +156,8 @@ public class FinalLocalVariableCheck extends Check case TokenTypes.PARAMETER_DEF: if (ScopeUtils.inInterfaceBlock(ast) - || inAbstractOrNativeMethod(ast)) + || inAbstractOrNativeMethod(ast) + || inLambda(ast)) { break; } @@ -247,6 +248,16 @@ public class FinalLocalVariableCheck extends Check return false; } + /** + * Check if current param is lamda's param. + * @param paramDef {@link TokenTypes#PARAMETER_DEF parameter def}. + * @return true if current param is lamda's param. + */ + private static boolean inLambda(DetailAST paramDef) + { + return paramDef.getParent().getParent().getType() == TokenTypes.LAMBDA; + } + /** * Inserts a variable at the topmost scope stack * @param ast the variable to insert 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 a6eebb532..e0d2e4131 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 @@ -18,12 +18,14 @@ //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.checks.coding; -import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; -import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import static com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck.MSG_KEY; + +import java.io.File; import org.junit.Test; -import static com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck.MSG_KEY; +import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; +import com.puppycrawl.tools.checkstyle.DefaultConfiguration; public class FinalLocalVariableCheckTest extends BaseCheckTestSupport @@ -121,4 +123,17 @@ public class FinalLocalVariableCheckTest }; verify(checkConfig, getPath("coding/InputFinalLocalVariableEnhancedForLoopVariable.java"), expected); } + + @Test + public void testLambda() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(FinalLocalVariableCheck.class); + checkConfig.addAttribute("tokens", "PARAMETER_DEF,VARIABLE_DEF"); + final String[] expected = {}; + verify(checkConfig, new File("src/test/resources-noncompilable/com/puppycrawl/" + + "tools/checkstyle/naming/InputFinalLocalVariableNameLambda.java"). + getCanonicalPath(), expected); + } } diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/naming/InputFinalLocalVariableNameLambda.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/naming/InputFinalLocalVariableNameLambda.java new file mode 100644 index 000000000..a279e3c29 --- /dev/null +++ b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/naming/InputFinalLocalVariableNameLambda.java @@ -0,0 +1,13 @@ +//Compilable with Java8 +package com.puppycrawl.tools.checkstyle.naming; + +public class InputFinalLocalVariableNameLambda { + + private void addTotalValueOfOrder(final AugmentedOrder order) { + final BigDecimal totalValueOfOrder = order.getTransactions().stream() + .reduce(BigDecimal.ZERO, + (t, u) -> t.add(u.getAmount()), + BigDecimal::add); + order.setTotalValueOfOrder(totalValueOfOrder.toPlainString()); + } +}