Class IllegalImportCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class IllegalImportCheck
    extends AbstractCheck

    Checks for imports from a set of illegal packages.

    Note: By default, the check rejects all sun.* packages since programs that contain direct calls to the sun.* packages are "not guaranteed to work on all Java-compatible platforms". To reject other packages, set property illegalPkgs to a list of the illegal packages.

    • Property illegalPkgs - Specify packages to reject, if regexp property is not set, checks if import is the part of package. If regexp property is set, then list of packages will be interpreted as regular expressions. Note, all properties for match will be used. Type is java.lang.String[]. Default value is sun.
    • Property illegalClasses - Specify class names to reject, if regexp property is not set, checks if import equals class name. If regexp property is set, then list of class names will be interpreted as regular expressions. Note, all properties for match will be used. Type is java.lang.String[]. Default value is "".
    • Property regexp - Control whether the illegalPkgs and illegalClasses should be interpreted as regular expressions. Type is boolean. Default value is false.

    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>
     

    The following example shows class with no illegal imports

     import java.lang.ArithmeticException;
     import java.util.List;
     import java.util.Enumeration;
     import java.util.Arrays;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    The following example shows class with two illegal imports

    • java.io.*, illegalPkgs property contains this package
    • java.sql.Connection is inside java.sql package
     import java.io.*;           // violation
     import java.lang.ArithmeticException;
     import java.sql.Connection; // violation
     import java.util.List;
     import java.util.Enumeration;
     import java.util.Arrays;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    To configure the check so that it rejects classes java.util.Date and java.sql.Connection:

     <module name="IllegalImport">
       <property name="illegalClasses"
         value="java.util.Date, java.sql.Connection"/>
     </module>
     

    The following example shows class with no illegal imports

     import java.io.*;
     import java.lang.ArithmeticException;
     import java.util.List;
     import java.util.Enumeration;
     import java.util.Arrays;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    The following example shows class with two illegal imports

    • java.sql.Connection, illegalClasses property contains this class
    • java.util.Date, illegalClasses property contains this class
     import java.io.*;
     import java.lang.ArithmeticException;
     import java.sql.Connection; // violation
     import java.util.List;
     import java.util.Enumeration;
     import java.util.Arrays;
     import java.util.Date;      // violation
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    To configure the check so that it rejects packages not satisfying to regular expression java\.util:

     <module name="IllegalImport">
       <property name="regexp" value="true"/>
       <property name="illegalPkgs" value="java\.util"/>
     </module>
     

    The following example shows class with no illegal imports

     import java.io.*;
     import java.lang.ArithmeticException;
     import java.sql.Connection;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    The following example shows class with four illegal imports

    • java.util.List
    • java.util.Enumeration
    • java.util.Arrays
    • java.util.Date

    All four imports match "java\.util" regular expression

     import java.io.*;
     import java.lang.ArithmeticException;
     import java.sql.Connection;
     import java.util.List;          // violation
     import java.util.Enumeration;   // violation
     import java.util.Arrays;        // violation
     import java.util.Date;          // violation
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    To configure the check so that it rejects class names not satisfying to regular expression ^java\.util\.(List|Arrays) and ^java\.sql\.Connection:

     <module name="IllegalImport">
       <property name="regexp" value="true"/>
       <property name="illegalClasses"
         value="^java\.util\.(List|Arrays), ^java\.sql\.Connection"/>
     </module>
     

    The following example shows class with no illegal imports

     import java.io.*;
     import java.lang.ArithmeticException;
     import java.util.Enumeration;
     import java.util.Date;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    The following example shows class with three illegal imports

    • java.sql.Connection matches "^java\.sql\.Connection" regular expression
    • java.util.List matches "^java\.util\.(List|Arrays)" regular expression
    • java.util.Arrays matches "^java\.util\.(List|Arrays)" regular expression
     import java.io.*;
     import java.lang.ArithmeticException;
     import java.sql.Connection;     // violation
     import java.util.List;          // violation
     import java.util.Enumeration;
     import java.util.Arrays;        // violation
     import java.util.Date;
     import sun.applet.*;
    
     public class InputIllegalImport { }
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • import.illegal
    Since:
    3.0
    • Field Detail

      • illegalPkgs

        private String[] illegalPkgs
        Specify packages to reject, if regexp property is not set, checks if import is the part of package. If regexp property is set, then list of packages will be interpreted as regular expressions. Note, all properties for match will be used.
      • illegalClasses

        private String[] illegalClasses
        Specify class names to reject, if regexp property is not set, checks if import equals class name. If regexp property is set, then list of class names will be interpreted as regular expressions. Note, all properties for match will be used.
      • regexp

        private boolean regexp
        Control whether the illegalPkgs and illegalClasses should be interpreted as regular expressions.
    • Constructor Detail

      • IllegalImportCheck

        public IllegalImportCheck()
        Creates a new IllegalImportCheck instance.
    • Method Detail

      • setIllegalPkgs

        public final void setIllegalPkgs​(String... from)
        Setter to specify packages to reject, if regexp property is not set, checks if import is the part of package. If regexp property is set, then list of packages will be interpreted as regular expressions. Note, all properties for match will be used.
        Parameters:
        from - illegal packages
      • setIllegalClasses

        public void setIllegalClasses​(String... from)
        Setter to specify class names to reject, if regexp property is not set, checks if import equals class name. If regexp property is set, then list of class names will be interpreted as regular expressions. Note, all properties for match will be used.
        Parameters:
        from - illegal classes
      • setRegexp

        public void setRegexp​(boolean regexp)
        Setter to control whether the illegalPkgs and illegalClasses should be interpreted as regular expressions.
        Parameters:
        regexp - a Boolean value
      • 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
      • isIllegalImportByRegularExpressions

        private boolean isIllegalImportByRegularExpressions​(String importText)
        Checks if an import matches one of the regular expressions for illegal packages or illegal class names.
        Parameters:
        importText - the argument of the import keyword
        Returns:
        if importText matches one of the regular expressions for illegal packages or illegal class names
      • isIllegalImportByPackagesAndClassNames

        private boolean isIllegalImportByPackagesAndClassNames​(String importText)
        Checks if an import is from a package or class name that must not be used.
        Parameters:
        importText - the argument of the import keyword
        Returns:
        if importText contains an illegal package prefix or equals illegal class name
      • isIllegalImport

        private boolean isIllegalImport​(String importText)
        Checks if an import is from a package or class name that must not be used.
        Parameters:
        importText - the argument of the import keyword
        Returns:
        if importText is illegal import