Class AvoidStarImportCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class AvoidStarImportCheck
    extends AbstractCheck

    Checks that there are no import statements that use the * notation.

    Rationale: Importing all classes from a package or static members from a class leads to tight coupling between packages or classes and might lead to problems when a new version of a library introduces name clashes.

    Note that property excludes is not recursive, subpackages of excluded packages are not automatically excluded.

    • Property excludes - Specify packages where starred class imports are allowed and classes where starred static member imports are allowed. Type is java.lang.String[]. Default value is "".
    • Property allowClassImports - Control whether to allow starred class imports like import java.util.*;. Type is boolean. Default value is false.
    • Property allowStaticMemberImports - Control whether to allow starred static member imports like import static org.junit.Assert.*;. Type is boolean. Default value is false.

    To configure the check:

     <module name="AvoidStarImport"/>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // violation
     import static java.lang.Math.*;   // violation
     import java.util.*;               // violation
     import java.net.*;                // violation
     

    To configure the check so that star imports from packages java.io and java.net as well as static members from class java.lang.Math are allowed:

     <module name="AvoidStarImport">
       <property name="excludes" value="java.io,java.net,java.lang.Math"/>
     </module>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // OK
     import static java.lang.Math.*;   // OK
     import java.util.*;               // violation
     import java.net.*;                // OK
     

    To configure the check so that star imports from all packages are allowed:

     <module name="AvoidStarImport">
       <property name="allowClassImports" value="true"/>
     </module>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // OK
     import static java.lang.Math.*;   // violation
     import java.util.*;               // OK
     import java.net.*;                // OK
     

    To configure the check so that starred static member imports from all packages are allowed:

     <module name="AvoidStarImport">
       <property name="allowStaticMemberImports" value="true"/>
     </module>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // violation
     import static java.lang.Math.*;   // OK
     import java.util.*;               // violation
     import java.net.*;                // violation
     

    To configure the check so that star imports from packages java.io and java.net are allowed:

     <module name="AvoidStarImport">
       <property name="allowClassImports" value="true"/>
       <property name="excludes" value="java.io,java.net"/>
     </module>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // OK
     import static java.lang.Math.*;   // violation
     import java.util.*;               // OK
     import java.net.*;                // OK
     

    To configure the check so that star imports from packages java.io and java.net as well as static members imports from all packages are allowed:

     <module name="AvoidStarImport">
       <property name="allowStaticMemberImports" value="true"/>
       <property name="excludes" value="java.io,java.net"/>
     </module>
     

    Example:

     import java.util.Scanner;         // OK
     import java.io.*;                 // OK
     import static java.lang.Math.*;   // OK
     import java.util.*;               // violation
     import java.net.*;                // OK
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • import.avoidStar
    Since:
    3.0
    • Field Detail

      • excludes

        private final List<String> excludes
        Specify packages where starred class imports are allowed and classes where starred static member imports are allowed.
      • allowClassImports

        private boolean allowClassImports
        Control whether to allow starred class imports like import java.util.*;.
      • allowStaticMemberImports

        private boolean allowStaticMemberImports
        Control whether to allow starred static member imports like import static org.junit.Assert.*;.
    • Method Detail

      • 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:
        TokenTypes
      • setExcludes

        public void setExcludes​(String... excludesParam)
        Setter to specify packages where starred class imports are allowed and classes where starred static member imports are allowed.
        Parameters:
        excludesParam - a list of package names/fully-qualifies class names where star imports are ok.
      • setAllowClassImports

        public void setAllowClassImports​(boolean allow)
        Setter to control whether to allow starred class imports like import java.util.*;.
        Parameters:
        allow - true to allow false to disallow
      • setAllowStaticMemberImports

        public void setAllowStaticMemberImports​(boolean allow)
        Setter to control whether to allow starred static member imports like import static org.junit.Assert.*;.
        Parameters:
        allow - true to allow false to disallow
      • logsStarredImportViolation

        private void logsStarredImportViolation​(DetailAST startingDot)
        Gets the full import identifier. If the import is a starred import and it's not excluded then a violation is logged.
        Parameters:
        startingDot - the starting dot for the import statement