diff --git a/pmd-java/src/main/resources/rulesets/java/unnecessary.xml b/pmd-java/src/main/resources/rulesets/java/unnecessary.xml
index 564f865ad3..abe93a8fd8 100644
--- a/pmd-java/src/main/resources/rulesets/java/unnecessary.xml
+++ b/pmd-java/src/main/resources/rulesets/java/unnecessary.xml
@@ -62,7 +62,8 @@ public class Foo {
externalInfoUrl="${pmd.website.baseurl}/rules/java/unnecessary.html#UnnecessaryFinalModifier">
When a class has the final modifier, all the methods are automatically final and do not need to be
-tagged as such. Similarly, private methods can't be overriden, and therefore do not need to be tagged either.
+tagged as such. Similarly, methods that can't be overridden (private methods, methods of anonymous classes,
+methods of enum instance) do not need to be tagged either.
3
@@ -73,7 +74,9 @@ tagged as such. Similarly, private methods can't be overriden, and therefore do
/ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration
[count(./Annotation/MarkerAnnotation/Name[@Image='SafeVarargs' or @Image='java.lang.SafeVarargs']) = 0]
/MethodDeclaration[@Final='true']
- | //MethodDeclaration[@Final='true' and @Private='true']
+| //MethodDeclaration[@Final='true' and @Private='true']
+| //EnumConstant/ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/MethodDeclaration[@Final='true']
+| //AllocationExpression/ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/MethodDeclaration[@Final='true']
]]>
diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unnecessary/xml/UnnecessaryFinalModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unnecessary/xml/UnnecessaryFinalModifier.xml
index 5ebd436a1b..cf8a27859c 100644
--- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unnecessary/xml/UnnecessaryFinalModifier.xml
+++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unnecessary/xml/UnnecessaryFinalModifier.xml
@@ -124,6 +124,34 @@ public class TestClass {
private final int getValue() {
return 0;
}
+}
+ ]]>
+
+
+ Unnecessary final of enum method
+ 1
+
+
+
+ Unnecessary final of anonymous class method
+ 1
+