diff options
Diffstat (limited to 'src')
3 files changed, 47 insertions, 7 deletions
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java index b5cf4a753..6e54b90f6 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java @@ -19,6 +19,7 @@ package com.puppycrawl.tools.checkstyle.checks.naming; +import com.google.common.base.Optional; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; @@ -117,14 +118,16 @@ public class ParameterNameCheck */ private static boolean isOverriddenMethod(DetailAST ast) { boolean overridden = false; + final DetailAST parent = ast.getParent().getParent(); - if (parent.getFirstChild().getFirstChild() != null) { - final DetailAST annotation = parent.getFirstChild().getFirstChild(); - if (annotation.getType() == TokenTypes.ANNOTATION) { - final DetailAST overrideToken = annotation.findFirstToken(TokenTypes.IDENT); - if ("Override".equals(overrideToken.getText())) { - overridden = true; - } + final Optional<DetailAST> annotation = + Optional.fromNullable(parent.getFirstChild().getFirstChild()); + + if (annotation.isPresent() && annotation.get().getType() == TokenTypes.ANNOTATION) { + final Optional<DetailAST> overrideToken = + Optional.fromNullable(annotation.get().findFirstToken(TokenTypes.IDENT)); + if (overrideToken.isPresent() && "Override".equals(overrideToken.get().getText())) { + overridden = true; } } return overridden; diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheckTest.java index 1c35fd32e..28b363d87 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheckTest.java @@ -137,4 +137,14 @@ public class ParameterNameCheckTest }; verify(checkConfig, getPath("InputOverrideAnnotation.java"), expected); } + + @Test + public void testIsOverriddenNoNullPointerException() + throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParameterNameCheck.class); + checkConfig.addAttribute("format", "^[a-z][a-zA-Z0-9]*$"); + checkConfig.addAttribute("ignoreOverridden", "true"); + final String[] expected = ArrayUtils.EMPTY_STRING_ARRAY; + verify(checkConfig, getPath("InputOverrideAnnotationNoNPE.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/InputOverrideAnnotationNoNPE.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/InputOverrideAnnotationNoNPE.java new file mode 100644 index 000000000..8295a120e --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/InputOverrideAnnotationNoNPE.java @@ -0,0 +1,27 @@ +package com.puppycrawl.tools.checkstyle.checks.naming; + +class InputOverrideAnnotationNoNPE +{ + // method with many parameters + void myMethod(int a, int b) { + + } + + // method with many parameters + void myMethod2(int a, int b) { + + } +} + +class Test extends InputOverrideAnnotationNoNPE +{ + @Override + void myMethod(int a, int b) { + + } + + @java.lang.Override + void myMethod2(int a, int b) { + + } +} |