resources.report.rules.pmd.SuspiciousEqualsMethodName.html Maven / Gradle / Ivy
SuspiciousEqualsMethodName
SuspiciousEqualsMethodName
The method name and parameter number are suspiciously close to equals(Object), which can denote an intention to override the equals(Object) method.
//MethodDeclarator[@Image = 'equals']
[
(count(FormalParameters/*) = 1
and not (FormalParameters/FormalParameter/Type/ReferenceType/ClassOrInterfaceType
[@Image = 'Object' or @Image = 'java.lang.Object'])
or not (../ResultType/Type/PrimitiveType[@Image = 'boolean'])
) or (
count(FormalParameters/*) = 2
and ../ResultType/Type/PrimitiveType[@Image = 'boolean']
and FormalParameters//ClassOrInterfaceType[@Image = 'Object' or @Image = 'java.lang.Object']
and not(../../Annotation/MarkerAnnotation/Name[@Image='Override'])
)
]
| //MethodDeclarator[@Image = 'equal']
[
count(FormalParameters/*) = 1
and FormalParameters/FormalParameter/Type/ReferenceType/ClassOrInterfaceType
[@Image = 'Object' or @Image = 'java.lang.Object']
]
Example(s):
public class Foo {
public int equals(Object o) {
// oops, this probably was supposed to be boolean equals
}
public boolean equals(String s) {
// oops, this probably was supposed to be equals(Object)
}
public boolean equals(Object o1, Object o2) {
// oops, this probably was supposed to be equals(Object)
}
}