Type Resolution Rules

These are rules which resolve java Class files for comparisson, as opposed to a String

LooseCoupling

Since: PMD 3.9

Avoid using implementation types (i.e., HashSet); use the interface (i.e, Set) instead

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.LooseCoupling

Example:

                

import java.util.ArrayList;
import java.util.HashSet;
public class Bar {
 // Use List instead
 private ArrayList list = new ArrayList();
 // Use Set instead
 public HashSet getFoo() {
  return new HashSet();
 }
}
  
      
            

CloneMethodMustImplementCloneable

Since: PMD 3.9

The method clone() should only be implemented if the class implements the Cloneable interface with the exception of a final method that only throws CloneNotSupportedException. This version uses PMD's type resolution facilities, and can detect if the class implements or extends a Cloneable class

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.CloneMethodMustImplementCloneable

Example:

                
            
public class MyClass {
 public Object clone() throws CloneNotSupportedException {
  return foo;
 }
}
   
        
            

UnusedImports

Since: PMD 4.0

Avoid unused import statements. This rule will find unused on demand imports, i.e. import com.foo.*.

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.imports.UnusedImports

Example:

                

// this is bad
import java.io.*;
public class Foo {}

    
            

SignatureDeclareThrowsException

Since: PMD 4.0

It is unclear which exceptions that can be thrown from the methods. It might be difficult to document and understand the vague interfaces. Use either a class derived from RuntimeException or a checked exception. Junit classes are excluded.

This rule is defined by the following Java class: net.sourceforge.pmd.typeresolution.rules.SignatureDeclareThrowsException

Example:

                
      	
public void methodThrowingException() throws Exception {
}
      	
      
            

This rule has the following properties:

NameDefault valueDescription
IgnoreJUnitCompletely false If true, all methods in a JUnit testcase may throw Exception