diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/naming/MethodNamingConventionsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/naming/MethodNamingConventionsRule.java index 5f7068f20e..bc773f624d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/naming/MethodNamingConventionsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/naming/MethodNamingConventionsRule.java @@ -3,9 +3,14 @@ */ package net.sourceforge.pmd.lang.java.rule.naming; +import java.util.List; + +import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit; +import net.sourceforge.pmd.lang.java.ast.ASTMarkerAnnotation; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclarator; +import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.rule.properties.BooleanProperty; @@ -30,6 +35,10 @@ public class MethodNamingConventionsRule extends AbstractJavaRule { return data; } + if (isOverriddenMethod(node)) { + return data; + } + String methodName = node.getImage(); if (Character.isUpperCase(methodName.charAt(0))) { @@ -41,4 +50,15 @@ public class MethodNamingConventionsRule extends AbstractJavaRule { return data; } + private boolean isOverriddenMethod(ASTMethodDeclarator node) { + ASTClassOrInterfaceBodyDeclaration declaration = node.getFirstParentOfType(ASTClassOrInterfaceBodyDeclaration.class); + List annotations = declaration.findDescendantsOfType(ASTMarkerAnnotation.class); + for (ASTMarkerAnnotation ann : annotations) { + ASTName name = ann.getFirstChildOfType(ASTName.class); + if (name != null && name.hasImageEqualTo("Override")) { + return true; + } + } + return false; + } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/naming/xml/MethodNamingConventions.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/naming/xml/MethodNamingConventions.xml index e962b685dc..d2283ba88a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/naming/xml/MethodNamingConventions.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/naming/xml/MethodNamingConventions.xml @@ -51,6 +51,17 @@ public class Foo { + + + #1343 MethodNamingConventions for overrided methods + 0 + diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index f891c77160..c23aaf7115 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -14,6 +14,7 @@ * [#1335](https://sourceforge.net/p/pmd/bugs/1335/): GuardLogStatementJavaUtil should not apply to SLF4J Logger * [#1342](https://sourceforge.net/p/pmd/bugs/1342/): UseConcurrentHashMap false positive (with documentation example) +* [#1343](https://sourceforge.net/p/pmd/bugs/1343/): MethodNamingConventions for overrided methods * [#1345](https://sourceforge.net/p/pmd/bugs/1345/): UseCollectionIsEmpty throws NullPointerException * [#1353](https://sourceforge.net/p/pmd/bugs/1353/): False positive "Only One Return" with lambda