Issue #3617: make FinalLocalVariable not check multi-catch vars

This commit is contained in:
liscju 2016-12-07 19:11:52 +01:00 committed by Roman Ivanov
parent 636ae05d05
commit 4d214096fc
3 changed files with 34 additions and 1 deletions

View File

@ -195,7 +195,8 @@ public class FinalLocalVariableCheck extends AbstractCheck {
if (!isInLambda(ast)
&& !ast.branchContains(TokenTypes.FINAL)
&& !isInAbstractOrNativeMethod(ast)
&& !ScopeUtils.isInInterfaceBlock(ast)) {
&& !ScopeUtils.isInInterfaceBlock(ast)
&& !isMultipleTypeCatch(ast)) {
insertParameter(ast);
}
break;
@ -468,6 +469,16 @@ public class FinalLocalVariableCheck extends AbstractCheck {
}
}
/**
* Check if given parameter definition is a multiple type catch.
* @param parameterDefAst parameter definition
* @return true if it is a multiple type catch, false otherwise
*/
private boolean isMultipleTypeCatch(DetailAST parameterDefAst) {
final DetailAST typeAst = parameterDefAst.findFirstToken(TokenTypes.TYPE);
return typeAst.getFirstChild().getType() == TokenTypes.BOR;
}
/**
* Whether the final variable candidate should be removed from the list of final local variable
* candidates.

View File

@ -239,4 +239,13 @@ public class FinalLocalVariableCheckTest
verify(checkConfig, getPath("InputFinalLocalVariableMultipleAndNestedConditions.java"),
expected);
}
@Test
public void testMultiTypeCatch() throws Exception {
final DefaultConfiguration checkConfig = createCheckConfig(FinalLocalVariableCheck.class);
checkConfig.addAttribute("tokens", "PARAMETER_DEF,VARIABLE_DEF");
final String[] expected = CommonUtils.EMPTY_STRING_ARRAY;
verify(checkConfig, getPath("InputFinalLocalVariableMultiCatch.java"),
expected);
}
}

View File

@ -0,0 +1,13 @@
package com.puppycrawl.tools.checkstyle.checks.coding;
public class InputFinalLocalVariableMultiCatch {
public void demo() throws Throwable {
try {
// do nothing
} catch (final NumberFormatException ex) {
// do nothing
} catch (IllegalStateException | NullPointerException ex) {
// do nothing
}
}
}