Skip to content

Commit 042b7a4

Browse files
committed
PMD: Remove rule as it yields too many FP
1 parent e6358ed commit 042b7a4

File tree

1 file changed

+0
-63
lines changed

1 file changed

+0
-63
lines changed

.config/pmd/java/ruleset.xml

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -766,69 +766,6 @@ public class Foo {
766766
</example>
767767
</rule>
768768

769-
<rule name="InitializeComparatorOnlyOnce"
770-
language="java"
771-
message="Avoid creating Comparator instances repeatedly. Initialize them as static final fields instead."
772-
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
773-
<description>
774-
Creating Comparator instances repeatedly in methods like compareTo or sort calls is inefficient.
775-
776-
Solution: Initialize the Comparator once as a static final field and reuse.
777-
</description>
778-
<priority>2</priority>
779-
<properties>
780-
<property name="xpath">
781-
<value>
782-
<![CDATA[
783-
//MethodCall[
784-
(pmd-java:matchesSig('java.util.Comparator#comparing(_*)')
785-
or pmd-java:matchesSig('java.util.Comparator#comparingInt(_)')
786-
or pmd-java:matchesSig('java.util.Comparator#comparingDouble(_)')
787-
or pmd-java:matchesSig('java.util.Comparator#comparingLong(_)')
788-
or pmd-java:matchesSig('java.util.Comparator#nullsFirst(_)')
789-
or pmd-java:matchesSig('java.util.Comparator#nullsLast(_)')
790-
or pmd-java:matchesSig('java.util.Comparator#reversed()')
791-
)
792-
(: not chained: AST is backwards with first call last element :)
793-
and not(MethodCall[pmd-java:typeIs('java.util.Comparator')])
794-
(: not used as argument to another Comparator method :)
795-
and not(parent::ArgumentList/parent::MethodCall[
796-
pmd-java:typeIs('java.util.Comparator')
797-
])
798-
(: used in non-static-final way :)
799-
and not(ancestor::FieldDeclaration[pmd-java:modifiers() = ('final') and pmd-java:modifiers() = ('static')])
800-
]
801-
]]>
802-
</value>
803-
</property>
804-
</properties>
805-
<example>
806-
<![CDATA[
807-
public class BadPerson implements Comparable<Person> {
808-
@Override
809-
public int compareTo(@NotNull Person o) {
810-
return Comparator.comparing(Person::getFirstName) // Bad: Creates new Comparator instance on each invocation
811-
.thenComparing(Person::getLastName)
812-
.thenComparingInt(Person::getAge)
813-
.compare(this, o);
814-
}
815-
}
816-
817-
public class GoodPerson implements Comparable<Person> {
818-
private static final Comparator<Person> COMPARE_FIRST_LAST_NAME_AGE =
819-
Comparator.comparing(Person::getFirstName)
820-
.thenComparing(Person::getLastName)
821-
.thenComparingInt(Person::getAge);
822-
823-
@Override
824-
public int compareTo(@NotNull Person o) {
825-
return COMPARE_FIRST_LAST_NAME_AGE.compare(this, o); // Good: Comparator initialized once as static final field
826-
}
827-
}
828-
]]>
829-
</example>
830-
</rule>
831-
832769
<rule name="AvoidCommonPoolForBlockingCalls"
833770
language="java"
834771
message="Avoid the ForkJoinPool::commonPool used in parallelStream for blocking calls"

0 commit comments

Comments
 (0)