Class UnusedImportsCheck
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
-
- com.puppycrawl.tools.checkstyle.checks.imports.UnusedImportsCheck
-
- All Implemented Interfaces:
Configurable
,Contextualizable
public class UnusedImportsCheck extends AbstractCheck
Checks for unused import statements. An import statement is considered unused if:-
It is not referenced in the file. The algorithm does not support wild-card
imports like
import java.io.*;
. Most IDE's provide very sophisticated checks for imports that handle wild-card imports. -
The class imported is from the
java.lang
package. For example importingjava.lang.String
. - The class imported is from the same package.
- A static method is imported when used as method reference. In that case, only the type needs to be imported and that's enough to resolve the method.
-
Optionally: it is referenced in Javadoc comments. This check is on by
default, but it is considered bad practice to introduce a compile-time
dependency for documentation purposes only. As an example, the import
java.util.List
would be considered referenced with the Javadoc comment{@link List}
. The alternative to avoid introducing a compile-time dependency would be to write the Javadoc comment as{@link java.util.List}
.
The main limitation of this check is handling the cases where:
- An imported type has the same name as a declaration, such as a member variable.
- There are two or more static imports with the same method name (javac can distinguish imports with same name but different parameters, but checkstyle can not due to limitation.)
-
Property
processJavadoc
- Control whether to process Javadoc comments. Type isboolean
. Default value istrue
.
Parent is
com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
-
import.unused
- Since:
- 3.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
UnusedImportsCheck.Frame
Holds the names of referenced types and names of declared inner types.-
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
AbstractAutomaticBean.OutputStreamOptions
-
-
Field Summary
Fields Modifier and Type Field Description private static Pattern
ARGUMENT_NAME
Regex to match argument names.private static Pattern
CLASS_NAME
Regex to match class names.private boolean
collect
Flag to indicate when time to start collecting references.private UnusedImportsCheck.Frame
currentFrame
The scope is being processed.private static Pattern
FIRST_CLASS_NAME
Regex to match the first class name.private Set<FullIdent>
imports
Set of the imports.private static Pattern
JAVA_LANG_PACKAGE_PATTERN
Regexp pattern to match java.lang package.static String
MSG_KEY
A key is pointing to the warning message text in "messages.properties" file.private boolean
processJavadoc
Control whether to process Javadoc comments.private static String
STAR_IMPORT_SUFFIX
Suffix for the star import.
-
Constructor Summary
Constructors Constructor Description UnusedImportsCheck()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
beginTree(DetailAST rootAST)
Called before the starting to process a tree.private void
collectReferencesFromJavadoc(DetailAST ast)
Collects references made in Javadoc comments.private static Set<String>
collectReferencesFromJavadoc(TextBlock textBlock)
Process a javadocTextBlock
and return the set of classes referenced within.void
finishTree(DetailAST rootAST)
Called after finished processing a tree.int[]
getAcceptableTokens()
The configurable token set.int[]
getDefaultTokens()
Returns the default token a check is interested in.int[]
getRequiredTokens()
The tokens that this check must be registered for.private static List<JavadocTag>
getValidTags(TextBlock cmt, JavadocUtil.JavadocTagType tagType)
Returns the list of valid tags found in a javadocTextBlock
.private static boolean
isQualifiedIdentifier(DetailAST ast)
Checks whether ast is a fully qualified identifier.private boolean
isUnusedImport(String imprt)
Checks whether an import is unused.void
leaveToken(DetailAST ast)
Called after all the child nodes have been process.private static Set<String>
matchPattern(String identifier, Pattern pattern)
private void
processIdent(DetailAST ast)
Collects references made by IDENT.private void
processImport(DetailAST ast)
Collects the details of imports.private static Set<String>
processJavadocTag(JavadocTag tag)
Returns a list of references that found in a javadocJavadocTag
.private void
processStaticImport(DetailAST ast)
Collects the details of static imports.void
setProcessJavadoc(boolean value)
Setter to control whether to process Javadoc comments.private static String
topLevelType(String type)
If the given type string contains "."void
visitToken(DetailAST ast)
Called to process a token.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
clearViolations, destroy, getFileContents, getFilePath, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, log, log, log, setFileContents, setTabWidth, setTokens
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
-
Methods inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
configure, contextualize, getConfiguration, setupChild
-
-
-
-
Field Detail
-
MSG_KEY
public static final String MSG_KEY
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
CLASS_NAME
private static final Pattern CLASS_NAME
Regex to match class names.
-
FIRST_CLASS_NAME
private static final Pattern FIRST_CLASS_NAME
Regex to match the first class name.
-
ARGUMENT_NAME
private static final Pattern ARGUMENT_NAME
Regex to match argument names.
-
JAVA_LANG_PACKAGE_PATTERN
private static final Pattern JAVA_LANG_PACKAGE_PATTERN
Regexp pattern to match java.lang package.
-
STAR_IMPORT_SUFFIX
private static final String STAR_IMPORT_SUFFIX
Suffix for the star import.- See Also:
- Constant Field Values
-
collect
private boolean collect
Flag to indicate when time to start collecting references.
-
processJavadoc
private boolean processJavadoc
Control whether to process Javadoc comments.
-
currentFrame
private UnusedImportsCheck.Frame currentFrame
The scope is being processed. Types declared in a scope can shadow imported types.
-
-
Constructor Detail
-
UnusedImportsCheck
public UnusedImportsCheck()
-
-
Method Detail
-
setProcessJavadoc
public void setProcessJavadoc(boolean value)
Setter to control whether to process Javadoc comments.- Parameters:
value
- Flag for processing Javadoc comments.- Since:
- 5.4
-
beginTree
public void beginTree(DetailAST rootAST)
Description copied from class:AbstractCheck
Called before the starting to process a tree. Ideal place to initialize information that is to be collected whilst processing a tree.- Overrides:
beginTree
in classAbstractCheck
- Parameters:
rootAST
- the root of the tree
-
finishTree
public void finishTree(DetailAST rootAST)
Description copied from class:AbstractCheck
Called after finished processing a tree. Ideal place to report on information collected whilst processing a tree.- Overrides:
finishTree
in classAbstractCheck
- Parameters:
rootAST
- the root of the tree
-
getDefaultTokens
public int[] getDefaultTokens()
Description copied from class:AbstractCheck
Returns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
getDefaultTokens
in classAbstractCheck
- Returns:
- the default tokens
- See Also:
TokenTypes
-
getRequiredTokens
public int[] getRequiredTokens()
Description copied from class:AbstractCheck
The tokens that this check must be registered for.- Specified by:
getRequiredTokens
in classAbstractCheck
- Returns:
- the token set this must be registered for.
- See Also:
TokenTypes
-
getAcceptableTokens
public int[] getAcceptableTokens()
Description copied from class:AbstractCheck
The configurable token set. Used to protect Checks against malicious users who specify an unacceptable token set in the configuration file. The default implementation returns the check's default tokens.- Specified by:
getAcceptableTokens
in classAbstractCheck
- Returns:
- the token set this check is designed for.
- See Also:
TokenTypes
-
visitToken
public void visitToken(DetailAST ast)
Description copied from class:AbstractCheck
Called to process a token.- Overrides:
visitToken
in classAbstractCheck
- Parameters:
ast
- the token to process
-
leaveToken
public void leaveToken(DetailAST ast)
Description copied from class:AbstractCheck
Called after all the child nodes have been process.- Overrides:
leaveToken
in classAbstractCheck
- Parameters:
ast
- the token leaving
-
isUnusedImport
private boolean isUnusedImport(String imprt)
Checks whether an import is unused.- Parameters:
imprt
- an import.- Returns:
- true if an import is unused.
-
processIdent
private void processIdent(DetailAST ast)
Collects references made by IDENT.- Parameters:
ast
- the IDENT node to process
-
isQualifiedIdentifier
private static boolean isQualifiedIdentifier(DetailAST ast)
Checks whether ast is a fully qualified identifier.- Parameters:
ast
- to check- Returns:
- true if given ast is a fully qualified identifier
-
processImport
private void processImport(DetailAST ast)
Collects the details of imports.- Parameters:
ast
- node containing the import details
-
processStaticImport
private void processStaticImport(DetailAST ast)
Collects the details of static imports.- Parameters:
ast
- node containing the static import details
-
collectReferencesFromJavadoc
private void collectReferencesFromJavadoc(DetailAST ast)
Collects references made in Javadoc comments.- Parameters:
ast
- node to inspect for Javadoc
-
collectReferencesFromJavadoc
private static Set<String> collectReferencesFromJavadoc(TextBlock textBlock)
Process a javadocTextBlock
and return the set of classes referenced within.- Parameters:
textBlock
- The javadoc block to parse- Returns:
- a set of classes referenced in the javadoc block
-
getValidTags
private static List<JavadocTag> getValidTags(TextBlock cmt, JavadocUtil.JavadocTagType tagType)
Returns the list of valid tags found in a javadocTextBlock
.- Parameters:
cmt
- The javadoc block to parsetagType
- The type of tags we're interested in- Returns:
- the list of tags
-
processJavadocTag
private static Set<String> processJavadocTag(JavadocTag tag)
Returns a list of references that found in a javadocJavadocTag
.- Parameters:
tag
- The javadoc tag to parse- Returns:
- A list of references that found in this tag
-
matchPattern
private static Set<String> matchPattern(String identifier, Pattern pattern)
- Parameters:
identifier
- The String to match the pattern againstpattern
- The Pattern used to extract the texts- Returns:
- A set of texts which matched the pattern
-
topLevelType
private static String topLevelType(String type)
If the given type string contains "." (e.g. "Map.Entry"), returns the top level type (e.g. "Map"), as that is what must be imported for the type to resolve. Otherwise, returns the type as-is.- Parameters:
type
- A possibly qualified type name- Returns:
- The simple name of the top level type
-
-