Type Resolution

These are rules which resolve java Class files for comparison, 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.lang.java.typeresolution.rules.LooseCoupling

Example(s):

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.lang.java.typeresolution.rules.CloneMethodMustImplementCloneable

Example(s):
            
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.lang.java.typeresolution.rules.imports.UnusedImports

Example(s):

import java.io.*;	// not referenced or required

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.lang.java.typeresolution.rules.SignatureDeclareThrowsException

Example(s):
      	
public void methodThrowingException() throws Exception {
}
      	
      

This rule has the following properties:

Name Default Value Description
IgnoreJUnitCompletely false If true, all methods in a JUnit testcase may throw Exception