resources.report.rules.pmd.MissingStaticMethodInNonInstantiatableClass.html Maven / Gradle / Ivy
MissingStaticMethodInNonInstantiatableClass
MissingStaticMethodInNonInstantiatableClass
A class that has private constructors and does not have any static methods or fields cannot be used.
//ClassOrInterfaceDeclaration[@Nested='false']
[
(
count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration)>0
and
count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private='true'])
)
and
count(.//MethodDeclaration[@Static='true'])=0
and
count(.//FieldDeclaration[@Private='false'][@Static='true'])=0
and
count(.//ClassOrInterfaceDeclaration[@Nested='true']
[@Public='true']
[@Static='true']
[count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public='true']) > 0]
[count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/MethodDeclaration
[@Public='true']
[./ResultType/Type/ReferenceType/ClassOrInterfaceType
[@Image = //ClassOrInterfaceDeclaration[@Nested='false']/@Image]
]
) > 0]
) = 0
and
count(//ClassOrInterfaceDeclaration
[@Nested='true']
[@Static='true']
[@Public='true']
[.//MethodDeclaration
[@Public='true']
[.//ReturnStatement//AllocationExpression
[ClassOrInterfaceType
[@Image = //ClassOrInterfaceDeclaration/@Image]
]
[./Arguments//PrimaryPrefix/@ThisModifier='true']
]
]
) = 0
]
Example(s):
// This class is unusable, since it cannot be
// instantiated (private constructor),
// and no static method can be called.
public class Foo {
private Foo() {}
void foo() {}
}