Class IllegalInstantiationCheck

All Implemented Interfaces:
Configurable, Contextualizable

Checks for illegal instantiations where a factory method is preferred.

Rationale: Depending on the project, for some classes it might be preferable to create instances through factory methods rather than calling the constructor.

A simple example is the java.lang.Boolean class. For performance reasons, it is preferable to use the predefined constants TRUE and FALSE. Constructor invocations should be replaced by calls to Boolean.valueOf().

Some extremely performance sensitive projects may require the use of factory methods for other classes as well, to enforce the usage of number caches or object pools.

There is a limitation that it is currently not possible to specify array classes.

  • Property classes - Specify fully qualified class names that should not be instantiated. Type is java.lang.String[]. Default value is "".

Parent is com.puppycrawl.tools.checkstyle.TreeWalker

Violation Message Keys:

  • instantiation.avoid
Since:
3.0
  • Field Details

  • Constructor Details

  • Method Details

    • 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:
    • 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:
    • 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:
    • 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
    • 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
    • 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
    • processClassDef

      private void processClassDef(DetailAST ast)
      Collects classes defined in the source file. Required to avoid false alarms for local vs. java.lang classes.
      Parameters:
      ast - the class def token.
    • processImport

      private void processImport(DetailAST ast)
      Perform processing for an import token.
      Parameters:
      ast - the import token
    • processPackageDef

      private void processPackageDef(DetailAST ast)
      Perform processing for an package token.
      Parameters:
      ast - the package token
    • processLiteralNew

      private void processLiteralNew(DetailAST ast)
      Collects a "new" token.
      Parameters:
      ast - the "new" token
    • postProcessLiteralNew

      private void postProcessLiteralNew(DetailAST newTokenAst)
      Processes one of the collected "new" tokens when walking tree has finished.
      Parameters:
      newTokenAst - the "new" token.
    • getIllegalInstantiation

      private String getIllegalInstantiation(String className)
      Checks illegal instantiations.
      Parameters:
      className - instantiated class, may or may not be qualified
      Returns:
      the fully qualified class name of className or null if instantiation of className is OK
    • checkImportStatements

      private String checkImportStatements(String className)
      Check import statements.
      Parameters:
      className - name of the class
      Returns:
      value of illegal instantiated type
    • isSamePackage

      private boolean isSamePackage(String className, int pkgNameLen, String illegal)
      Check that type is of the same package.
      Parameters:
      className - class name
      pkgNameLen - package name
      illegal - illegal value
      Returns:
      true if type of the same package
    • isStandardClass

      private boolean isStandardClass(String className, String illegal)
      Is Standard Class.
      Parameters:
      className - class name
      illegal - illegal value
      Returns:
      true if type is standard
    • setClasses

      public void setClasses(String... names)
      Setter to specify fully qualified class names that should not be instantiated.
      Parameters:
      names - class names
      Since:
      3.0