All Downloads are FREE. Search and download functionalities are using the official Maven repository.

resources.report.rules.pmd.MissingStaticMethodInNonInstantiatableClass.html Maven / Gradle / Ivy

Go to download

Sanity4J was created to simplify running multiple static code analysis tools on the Java projects. It provides a single entry point to run all the selected tools and produce a consolidated report, which presents all findings in an easily accessible manner.

The newest version!


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() {}
}






© 2015 - 2024 Weber Informatics LLC | Privacy Policy