Import Statement Rules

These rules deal with different problems that can occur with a class' import statements.

DuplicateImports

Since: PMD0.5

Avoid duplicate import statements.

This rule is defined by the following Java class:net.sourceforge.pmd.lang.java.rule.imports.DuplicateImportsRule

Example(s):

import java.lang.String;
import java.lang.*;
public class Foo {}

    

DontImportJavaLang

Since: PMD0.5

Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3).

This rule is defined by the following Java class:net.sourceforge.pmd.lang.java.rule.imports.DontImportJavaLangRule

Example(s):

// this is bad
import java.lang.String;
public class Foo {}

// --- in another source code file...

// this is bad
import java.lang.*;

public class Foo {}

    

UnusedImports

Since: PMD1.0

Avoid unused import statements.

This rule is defined by the following Java class:net.sourceforge.pmd.lang.java.rule.imports.UnusedImportsRule

Example(s):

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

    

ImportFromSamePackage

Since: PMD1.02

No need to import a type that lives in the same package.

This rule is defined by the following Java class:net.sourceforge.pmd.lang.java.rule.imports.ImportFromSamePackageRule

Example(s):
 
 package foo;
 import foo.Buz; // no need for this
 import foo.*; // or this
 public class Bar{}
 
     

TooManyStaticImports

Since: PMD4.1

If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from (Sun 1.5 Language Guide).

.[count(ImportDeclaration[@Static = 'true']) > $maximumStaticImports]
	             
Example(s):
import static Lennon;
import static Ringo;
import static George;
import static Paul;
import static Yoko; // Too much !
		  

This rule has the following properties:

Name Default Value Description
maximumStaticImports 4 All static imports can be disallowed by setting this to 0

UnnecessaryFullyQualifiedName

Since: PMD5.0

Import statements allow the use of non-fully qualified names. The use of a fully qualified name which is covered by an import statement is redundant. Consider using the non-fully qualified name.

This rule is defined by the following Java class:net.sourceforge.pmd.lang.java.rule.imports.UnnecessaryFullyQualifiedNameRule

Example(s):
import java.util.List;

public class Foo {
   private java.util.List list1; // Unnecessary FQN
   private List list2; // More appropriate given import of 'java.util.List'
}