Final Local Variable Name Check, fixed bug with lambda's params, issue #747

This commit is contained in:
alexkravin 2015-03-12 22:12:44 +04:00 committed by Roman Ivanov
parent 48eeab9932
commit 5512e6fdba
3 changed files with 43 additions and 4 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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());
}
}