Checks that there are no import statements that use the * notation.
Rationale: Importing all classes from a package leads to tight coupling between packages and might lead to problems when a new version of a library introduces name clashes.
name | description | type | default value |
---|---|---|---|
excludes | packages where star imports are allowed. Note that this property is not recursive, subpackages of excluded packages are not automatically excluded. |
An example how to configure the check so that star imports from java.io and java.net are allowed:
![]() |
![]() |
![]() |
![]() |
<module name="AvoidStarImport"> <property name="excludes" value="java.io,java.net"/> </module> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Checks that there are no static import statements.
Rationale: Importing static members can lead to naming conflicts between class' members. It may lead to poor code readability since it may no longer be clear what class a member resides in (without looking at the import statement).
name | description | type | default value |
---|---|---|---|
excludes |
Allows for certain classes via a star notation to be
excluded such as java.lang.Math.* or specific static
members to be excluded like java.lang.System.out for a variable or
java.lang.Math.random for a
method.
If you exclude a starred import on a class this automatically excludes each member individually. For example: Excluding java.lang.Math.*. will allow the import of each static member in the Math class individually like java.lang.Math.PI. |
An example of how to configure the check so that the java.lang.System.out member and all members from java.lang.Math are allowed:
![]() |
![]() |
![]() |
![]() |
<module name="AvoidStaticImport"> <property name="excludes" value="java.lang.System.out,java.lang.Math.*"/> </module> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Checks for imports from a set of illegal packages. By default, the check rejects all sun.* packages since programs that contain direct calls to the sun.* packages are not 100% Pure Java. To reject other packages, set property illegalPkgs to a list of the illegal packages.
name | description | type | default value |
---|---|---|---|
illegalPkgs | packages to reject |
To configure the check:
![]() |
![]() |
![]() |
![]() |
<module name="IllegalImport"/> |
![]() |
![]() |
![]() |
![]() |
To configure the check so that it rejects packages java.io.* and java.sql.*:
![]() |
![]() |
![]() |
![]() |
<module name="IllegalImport"> <property name="illegalPkgs" value="java.io, java.sql"/> </module> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Checks for redundant import statements. An import statement is considered redundant if:
To configure the check:
![]() |
![]() |
![]() |
![]() |
<module name="RedundantImport"/> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Checks for unused import statements. Checkstyle uses a simple but very reliable algorithm to report on unused import statements. An import statement is considered unused if:
The main limitation of this check is handling the case where an imported type has the same name as a declaration, such as a member variable.
For example, in the following case the import java.awt.Component will not be flagged as unused:
![]() |
![]() |
![]() |
![]() |
import java.awt.Component; class FooBar { private Object Component; // IMHO bad practise ... } |
![]() |
![]() |
![]() |
![]() |
To configure the check:
![]() |
![]() |
![]() |
![]() |
<module name="UnusedImports"/> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Checks the ordering/grouping of imports. Features are:
name | description | type | default value |
---|---|---|---|
option | policy on the relative order between regular imports and static imports | ||
groups | list of imports groups (every group identified by string it's started) | ||
ordered | whether imports within group should be sorted | true | |
separated | whether imports groups should be separated by, at least, one blank line | false | |
caseSensitive | whether string comparision should be case sensitive or not | true |
To configure the check so that it requires that:
![]() |
![]() |
![]() |
![]() |
<module name="ImportOrder"> <property name="groups" value="java,javax"/> <property name="ordered" value="true"/> <property name="separated" value="true"/> <property name="option" value="above"/> </module> |
![]() |
![]() |
![]() |
![]() |
com.puppycrawl.tools.checkstyle.checks.imports
Controls what can be imported in each package. Useful for ensuring that application layering rules are not violated, especially on large projects.
The DTD for a import control XML document is at http://www.puppycrawl.com/dtds/import_control_1_0.dtd. It contains documentation on each of the elements and attributes.
The check validates a XML document when it loads the document. To validate against the above DTD, include the following document type declaration in your XML document:
<!DOCTYPE import-control PUBLIC "-//Puppy Crawl//DTD Import Control 1.0//EN" "http://www.puppycrawl.com/dtds/import_control_1_0.dtd">
name | description | type | default value |
---|---|---|---|
file | name of the file containing the import control configuration. | ||
url | url of the file containing the import control configuration. |
To configure the check using a import control file called "import-control.xml", then have the following:
![]() |
![]() |
![]() |
![]() |
<module name="ImportControl"> <property name="file" value="import-control.xml"/> </module> |
![]() |
![]() |
![]() |
![]() |
For an example import control file, look at the file called import-control.xml which is part of the Checkstyle distribution.
com.puppycrawl.tools.checkstyle.checks.imports