From 3c6eed61fcfdc1d1e55bb016e3a76b44b80cbfe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Mon, 26 Jun 2017 15:03:23 -0300 Subject: [PATCH] [java] Detect more unnecessary finals - Mark unnecessary finals in anonymous class methods. - Mark unnecessary finals in enum instance methods. - Fixes #412 --- .../resources/rulesets/java/unnecessary.xml | 7 +++-- .../xml/UnnecessaryFinalModifier.xml | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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 +