[java] Update rule AvoidCalendarDateCreation to use XPath 2.0

This commit is contained in:
Andreas Dangel
2020-06-13 19:48:50 +02:00
parent ca6a1b6b1f
commit 9dea892121
2 changed files with 45 additions and 45 deletions

View File

@ -115,26 +115,28 @@ public class Test {
</rule>
<rule name="AvoidCalendarDateCreation"
since="6.17.0"
since="6.25.0"
language="java"
message="A Calendar is used to create a Date or DateTime, this is expensive."
class="net.sourceforge.pmd.lang.rule.XPathRule"
typeResolution="true"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_performance.html#avoidcalendardatecreation">
<description>Problem: A Calendar is a heavyweight object and expensive to create. &#13;
Solution: Use 'new Date()', Java 8+ java.time.[Local/Zoned]DateTime.now() or joda time '[Local]DateTime.now()'.
<description>
Problem: A Calendar is a heavyweight object and expensive to create.
Solution: Use `new Date()`, Java 8+ `java.time.LocalDateTime.now()` or `ZonedDateTime.now()`.
</description>
<priority>2</priority>
<properties>
<property name="version" value="1.0"/>
<property name="version" value="2.0"/>
<property name="xpath">
<value><![CDATA[
//PrimaryPrefix[Name[ends-with(@Image, 'Calendar.getInstance')]] [count(../PrimarySuffix) > 2 and ../PrimarySuffix[last()-1][@Image = 'getTime' or @Image='getTimeInMillis']]
|
//Block/BlockStatement//Expression/PrimaryExpression/
PrimaryPrefix/Name[typeIs('java.util.Calendar') and (ends-with(@Image,'.getTime') or ends-with(@Image,'.getTimeInMillis'))]
PrimaryPrefix/Name[pmd-java:typeIs('java.util.Calendar') and (ends-with(@Image,'.getTime') or ends-with(@Image,'.getTimeInMillis'))]
|
//ClassOrInterfaceType[typeIs('org.joda.time.DateTime') or typeIs('org.joda.time.LocalDateTime')][../Arguments/ArgumentList/Expression/PrimaryExpression/PrimaryPrefix/Name[ends-with(@Image, 'Calendar.getInstance')]]
//ClassOrInterfaceType[pmd-java:typeIs('org.joda.time.DateTime') or pmd-java:typeIs('org.joda.time.LocalDateTime')][../Arguments/ArgumentList/Expression/PrimaryExpression/PrimaryPrefix/Name[ends-with(@Image, 'Calendar.getInstance')]]
]]></value>
</property>
</properties>

View File

@ -3,6 +3,7 @@
xmlns="http://pmd.sourceforge.net/rule-tests"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
<test-code>
<description>violation: [Gregorian]Calendar.getInstance().getTime()</description>
<expected-problems>4</expected-problems>
@ -95,7 +96,4 @@ public class Foo {
}
]]></code>
</test-code>
</test-data>