[java] Fix #4393 MissingStaticMethodInNonInstantiatableClass: Fix false-positive for field-only class

This commit is contained in:
Dawid Ciok
2023-02-14 12:34:09 +01:00
committed by Andreas Dangel
parent c4ee830721
commit af7640f136
2 changed files with 56 additions and 6 deletions

View File

@@ -2572,12 +2572,23 @@ See the property `annotations`.
[Annotation[pmd-java:typeIs('lombok.experimental.UtilityClass')]]
[ClassOrInterfaceDeclaration/ClassOrInterfaceBody
[
(: no methods :)
not(ClassOrInterfaceBodyDeclaration/MethodDeclaration)
or
(: only private methods :)
count(ClassOrInterfaceBodyDeclaration/MethodDeclaration) = count(ClassOrInterfaceBodyDeclaration/MethodDeclaration[@Private=true()])
]
(
(: no methods :)
not(ClassOrInterfaceBodyDeclaration/MethodDeclaration)
or
(: only private methods :)
count(ClassOrInterfaceBodyDeclaration/MethodDeclaration) = count(ClassOrInterfaceBodyDeclaration/MethodDeclaration[@Private=true()])
)
and
(
(: no fields :)
not(ClassOrInterfaceBodyDeclaration/FieldDeclaration)
or
(: only private fields :)
count(ClassOrInterfaceBodyDeclaration/FieldDeclaration) = count(ClassOrInterfaceBodyDeclaration/FieldDeclaration[@Private=true()])
)
]
]
|
//TypeDeclaration

View File

@@ -444,6 +444,45 @@ public final class Test {
]]></code>
</test-code>
<test-code>
<description>#4393 [java] MissingStaticMethodInNonInstantiatableClass should consider lombok's UtilityClass</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import lombok.experimental.UtilityClass;
@UtilityClass
public final class Test {
int x;
}
]]></code>
</test-code>
<test-code>
<description>#4393 [java] MissingStaticMethodInNonInstantiatableClass should consider lombok's UtilityClass</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import lombok.experimental.UtilityClass;
@UtilityClass
public final class Test {
public static final String CONSTANT = "Constant";
}
]]></code>
</test-code>
<test-code>
<description>#4393 [java] MissingStaticMethodInNonInstantiatableClass should consider lombok's UtilityClass</description>
<expected-problems>1</expected-problems>
<code><![CDATA[
import lombok.experimental.UtilityClass;
@UtilityClass
public final class Test {
private static final String CONSTANT = "Constant";
}
]]></code>
</test-code>
<test-code>
<description>#4225 [java] MissingStaticMethodInNonInstantiatableClass should consider Lombok's @NoArgsConstructor</description>
<expected-problems>0</expected-problems>