diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheck.java index f88ea4bda..22081a833 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheck.java @@ -132,6 +132,7 @@ public class RedundantModifierCheck TokenTypes.CTOR_DEF, TokenTypes.CLASS_DEF, TokenTypes.ENUM_DEF, + TokenTypes.RESOURCE, }; } @@ -157,6 +158,9 @@ public class RedundantModifierCheck else if (ast.getType() == TokenTypes.METHOD_DEF) { processMethods(ast); } + else if (ast.getType() == TokenTypes.RESOURCE) { + processResources(ast); + } } /** @@ -290,6 +294,26 @@ public class RedundantModifierCheck } } + /** + * Checks if given resource has redundant modifiers. + * @param ast ast + */ + private void processResources(DetailAST ast) { + final DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); + DetailAST modifier = modifiers.getFirstChild(); + + while (modifier != null) { + final int type = modifier.getType(); + + if (type == TokenTypes.FINAL) { + log(modifier.getLineNo(), modifier.getColumnNo(), MSG_KEY, modifier.getText()); + break; + } + + modifier = modifier.getNextSibling(); + } + } + /** * Checks if given ast has redundant public modifier. * @param ast ast diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheckTest.java index f38e15083..35ccec712 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/modifier/RedundantModifierCheckTest.java @@ -164,6 +164,7 @@ public class RedundantModifierCheckTest TokenTypes.CTOR_DEF, TokenTypes.CLASS_DEF, TokenTypes.ENUM_DEF, + TokenTypes.RESOURCE, }; Assert.assertArrayEquals(expected, actual); } @@ -198,4 +199,15 @@ public class RedundantModifierCheckTest }; verify(checkConfig, getPath("InputFinalInAnonymousClass.java"), expected); } + + @Test + public void testFinalInTryWithResource() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(RedundantModifierCheck.class); + final String[] expected = { + "22:14: " + getCheckMessage(MSG_KEY, "final"), + "27:14: " + getCheckMessage(MSG_KEY, "final"), + "28:17: " + getCheckMessage(MSG_KEY, "final"), + }; + verify(checkConfig, getPath("InputFinalInTryWithResource.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/modifier/InputFinalInTryWithResource.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/modifier/InputFinalInTryWithResource.java new file mode 100644 index 000000000..24dbad437 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/modifier/InputFinalInTryWithResource.java @@ -0,0 +1,37 @@ +package com.puppycrawl.tools.checkstyle.checks.modifier; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +public class InputFinalInTryWithResource { + public static void test() { + try { + } + catch (RuntimeException e) { + } + + try (@NotNull BufferedReader br = new BufferedReader(new FileReader(""))) { + } + catch (IOException e) { + } + + try (final BufferedReader br = new BufferedReader(new FileReader(""))) { + } + catch (IOException e) { + } + + try (final BufferedReader br = new BufferedReader(new FileReader("")); + final BufferedReader br2 = new BufferedReader(new FileReader(""))) { + } + catch (IOException e) { + } + } +} + +@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) +@interface NotNull { +} diff --git a/src/xdocs/config_modifier.xml b/src/xdocs/config_modifier.xml index 7911772be..32ef23e23 100644 --- a/src/xdocs/config_modifier.xml +++ b/src/xdocs/config_modifier.xml @@ -246,7 +246,8 @@ INTERFACE_DEF, CTOR_DEF, CLASS_DEF, - ENUM_DEF. + ENUM_DEF, + RESOURCE. METHOD_DEF, @@ -255,7 +256,8 @@ INTERFACE_DEF, CTOR_DEF, CLASS_DEF, - ENUM_DEF. + ENUM_DEF, + RESOURCE.