Applied patch 2822131: Enhance SuspiciousEqualsMethodName, thanks to Andy Throgmorton

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/branches/pmd/4.3.x@7402 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Romain Pelisse 2011-10-14 13:47:45 +00:00
parent 14cc641316
commit f2ac93a42d
2 changed files with 21 additions and 14 deletions

View File

@ -8,6 +8,7 @@ Fix small bug in Rule Designer UI
Improve TooManyMethods rule - thanks to a patch from Riku Nykanen
Improve DoNotCallSystemExit - thanks to a patch from Steven Christou
Fix false negative for UseArraysAsList when the array was passed as method parameter - thanks to Andy Throgmorton
Enhanced SuspiciousEqualsMethodName rule - thanks to Andy Throgmorton
New Rule:
Basic ruleset: DontCallThreadRun - thanks to Andy Throgmorton

View File

@ -308,21 +308,24 @@ method.
<property name="xpath">
<value>
<![CDATA[
//MethodDeclarator[
(
@Image = 'equals'
and count(FormalParameters/*) = 1
and not (FormalParameters/FormalParameter/Type/ReferenceType/ClassOrInterfaceType
[@Image = 'Object' or @Image = 'java.lang.Object'])
)
or
@Image='equal'
and count(FormalParameters/*) = 1
and (FormalParameters/FormalParameter/Type/ReferenceType/ClassOrInterfaceType
[@Image = 'Object' or @Image = 'java.lang.Object'])
//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']
)
]
]]>
| //MethodDeclarator[@Image = 'equal']
[
count(FormalParameters/*) = 1
and FormalParameters/FormalParameter/Type/ReferenceType/ClassOrInterfaceType
[@Image = 'Object' or @Image = 'java.lang.Object']
] ]]>
</value>
</property>
</properties>
@ -335,6 +338,9 @@ public class Foo {
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)
}
}
]]>
</example>