Fork me on GitHub

Import Statements

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

DuplicateImports

Since: PMD 0.5

Priority: 4

Duplicate or overlapping import statements should be avoided.

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

    

This rule has the following properties:

Name Default Value Description
violationSuppressRegex Suppress violations with messages matching a regular expression
violationSuppressXPath Suppress violations on nodes which match a given relative XPath expression.

DontImportJavaLang

Since: PMD 0.5

Priority: 4

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):


import java.lang.String;	// this is unnecessary

public class Foo {}

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

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

public class Foo {}

    

This rule has the following properties:

Name Default Value Description
violationSuppressRegex Suppress violations with messages matching a regular expression
violationSuppressXPath Suppress violations on nodes which match a given relative XPath expression.

UnusedImports

Since: PMD 1.0

Priority: 4

Avoid the use of unused import statements to prevent unwanted dependencies.

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

    

This rule has the following properties:

Name Default Value Description
violationSuppressRegex Suppress violations with messages matching a regular expression
violationSuppressXPath Suppress violations on nodes which match a given relative XPath expression.

ImportFromSamePackage

Since: PMD 1.02

Priority: 3

There is 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{}
 
     

This rule has the following properties:

Name Default Value Description
violationSuppressRegex Suppress violations with messages matching a regular expression
violationSuppressXPath Suppress violations on nodes which match a given relative XPath expression.

TooManyStaticImports

Since: PMD 4.1

Priority: 3

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: PMD 5.0

Priority: 4

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'
}
		  

This rule has the following properties:

Name Default Value Description
violationSuppressRegex Suppress violations with messages matching a regular expression
violationSuppressXPath Suppress violations on nodes which match a given relative XPath expression.