diff --git a/pmd/etc/changelog.txt b/pmd/etc/changelog.txt
index 941428e1ff..89b06825bc 100644
--- a/pmd/etc/changelog.txt
+++ b/pmd/etc/changelog.txt
@@ -5,6 +5,7 @@ Updates to RuleChain to honor RuleSet exclude-pattern
Upgrading UselessOperationOnImmutable to detect more use cases, especially on String
Fixed bug 1988829 - Violation reported without source file name (actually a fix to ConsecutiveLiteralAppends)
Fixed bug 1989814 - false +: ConsecutiveLiteralAppends
+Fixed bug 1977230 - false positive: UselessOverridingMethod
New rule:
Basic ruleset: EmptyInitializer
diff --git a/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml b/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml
index 263afd3a6c..31fec5b345 100644
--- a/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml
+++ b/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml
@@ -263,6 +263,28 @@ private static class ExposingSerializer extends Serializer {
public void exposedWriteAttributeValue(String text) throws IOException {
writeAttributeValue(text);
}
+}
+ ]]>
+
+
+
+
+
+ 0
+
+
diff --git a/pmd/src/net/sourceforge/pmd/rules/UselessOverridingMethod.java b/pmd/src/net/sourceforge/pmd/rules/UselessOverridingMethod.java
index dd0231fec4..f8371c6ed0 100644
--- a/pmd/src/net/sourceforge/pmd/rules/UselessOverridingMethod.java
+++ b/pmd/src/net/sourceforge/pmd/rules/UselessOverridingMethod.java
@@ -156,8 +156,13 @@ public class UselessOverridingMethod extends AbstractRule {
if (!primaryPrefix.hasImageEqualTo(methodDeclarator.getImage()))
return super.visit(node, data);
+ List primarySuffixList = findFirstDegreeChildrenOfType(primaryExpression, ASTPrimarySuffix.class);
+ if (primarySuffixList.size() != 1) {
+ // extra method call on result of super method
+ return super.visit(node, data);
+ }
//Process arguments
- ASTPrimarySuffix primarySuffix = findFirstDegreeChildrenOfType(primaryExpression, ASTPrimarySuffix.class).get(0);
+ ASTPrimarySuffix primarySuffix = primarySuffixList.get(0);
ASTArguments arguments = (ASTArguments) primarySuffix.jjtGetChild(0);
ASTFormalParameters formalParameters = (ASTFormalParameters) methodDeclarator.jjtGetChild(0);
if (formalParameters.jjtGetNumChildren() != arguments.jjtGetNumChildren())