Class 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 importing java.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 is boolean. Default value is true.

Parent is com.puppycrawl.tools.checkstyle.TreeWalker

Violation Message Keys:

  • import.unused
Since:
3.0
  • Field Details

  • Constructor Details

  • Method Details

    • 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 class AbstractCheck
      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 class AbstractCheck
      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 class AbstractCheck
      Returns:
      the default tokens
      See Also:
    • getRequiredTokens

      public int[] getRequiredTokens()
      Description copied from class: AbstractCheck
      The tokens that this check must be registered for.
      Specified by:
      getRequiredTokens in class AbstractCheck
      Returns:
      the token set this must be registered for.
      See Also:
    • 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 class AbstractCheck
      Returns:
      the token set this check is designed for.
      See Also:
    • visitToken

      public void visitToken(DetailAST ast)
      Description copied from class: AbstractCheck
      Called to process a token.
      Overrides:
      visitToken in class AbstractCheck
      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 class AbstractCheck
      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

      Collects references made in Javadoc comments.
      Parameters:
      ast - node to inspect for Javadoc
    • collectReferencesFromJavadoc

      private static Set<String> collectReferencesFromJavadoc(TextBlock textBlock)
      Process a javadoc TextBlock 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
    • getTargetTags

      private static List<JavadocTag> getTargetTags(TextBlock cmt, JavadocUtil.JavadocTagType javadocTagType)
      Returns the list of valid tags found in a javadoc TextBlock. Filters tags based on whether they are inline or block tags, ensuring they match the correct format supported.
      Parameters:
      cmt - The javadoc block to parse
      javadocTagType - 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 javadoc JavadocTag.
      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)
      Extracts a set of texts matching a Pattern from a String.
      Parameters:
      identifier - The String to match the pattern against
      pattern - 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
    • isMatchingTagType

      private static boolean isMatchingTagType(JavadocTag tag, JavadocUtil.JavadocTagType javadocTagType)
      Checks if a Javadoc tag matches the expected type based on its extraction format. This method checks if an inline tag is extracted as a block tag or vice versa. It ensures that block tags are correctly recognized as block tags and inline tags as inline tags during processing.
      Parameters:
      tag - The Javadoc tag to check.
      javadocTagType - The expected type of the tag (BLOCK or INLINE).
      Returns:
      true if the tag matches the expected type, otherwise false.
    • bestTryToMatchReference

      Attempts to match a reference string against a predefined pattern and extracts valid reference.
      Parameters:
      tag - the input tag to check
      Returns:
      Optional of extracted references
    • extractReferencePart

      private static @org.checkerframework.checker.index.qual.IndexOrLow({"#1"}) int extractReferencePart(String input)
      Extracts the reference part from an input string while ensuring balanced parentheses.
      Parameters:
      input - the input string
      Returns:
      -1 if parentheses are unbalanced, 0 if no method is found, or the index of the first space outside parentheses.