Class IllegalThrowsCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public final class IllegalThrowsCheck
    extends AbstractCheck

    Checks that specified types are not declared to be thrown. Declaring that a method throws java.lang.Error or java.lang.RuntimeException is almost never acceptable.

    • Property illegalClassNames - Specify throw class names to reject. Type is java.lang.String[]. Default value is Error, RuntimeException, Throwable, java.lang.Error, java.lang.RuntimeException, java.lang.Throwable.
    • Property ignoredMethodNames - Specify names of methods to ignore. Type is java.lang.String[]. Default value is finalize.
    • Property ignoreOverriddenMethods - allow to ignore checking overridden methods (marked with Override or java.lang.Override annotation). Type is boolean. Default value is true.

    To configure the check:

     <module name="IllegalThrows"/>
     

    Example:

     public class Test {
       public void func1() throws RuntimeException {} // violation
       public void func2() throws Exception {}  // ok
       public void func3() throws Error {}  // violation
       public void func4() throws Throwable {} // violation
       public void func5() throws NullPointerException {} // ok
       @Override
       public void toString() throws Error {} // ok
     }
     

    To configure the check rejecting throws NullPointerException from methods:

     <module name="IllegalThrows">
       <property name="illegalClassNames" value="NullPointerException"/>
     </module>
     

    Example:

     public class Test {
       public void func1() throws RuntimeException {} // ok
       public void func2() throws Exception {}  // ok
       public void func3() throws Error {}  // ok
       public void func4() throws Throwable {} // ok
       public void func5() throws NullPointerException {} // violation
       @Override
       public void toString() throws Error {} // ok
     }
     

    To configure the check ignoring method named "func1()":

     <module name="IllegalThrows">
       <property name="ignoredMethodNames" value="func1"/>
     </module>
     

    Example:

     public class Test {
       public void func1() throws RuntimeException {} // ok
       public void func2() throws Exception {}  // ok
       public void func3() throws Error {}  // violation
       public void func4() throws Throwable {} // violation
       public void func5() throws NullPointerException {} // ok
       @Override
       public void toString() throws Error {} // ok
     }
     

    To configure the check to warn on overridden methods:

     <module name="IllegalThrows">
       <property name="ignoreOverriddenMethods" value="false"/>
     </module>
     

    Example:

     public class Test {
       public void func1() throws RuntimeException {} // violation
       public void func2() throws Exception {}  // ok
       public void func3() throws Error {}  // violation
       public void func4() throws Throwable {} // violation
       public void func5() throws NullPointerException {} // ok
       @Override
       public void toString() throws Error {} // violation
     }
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • illegal.throw
    Since:
    4.0
    • Field Detail

      • MSG_KEY

        public static final java.lang.String MSG_KEY
        A key is pointing to the warning message text in "messages.properties" file.
        See Also:
        Constant Field Values
      • ignoredMethodNames

        private final java.util.Set<java.lang.String> ignoredMethodNames
        Specify names of methods to ignore.
      • illegalClassNames

        private final java.util.Set<java.lang.String> illegalClassNames
        Specify throw class names to reject.
      • ignoreOverriddenMethods

        private boolean ignoreOverriddenMethods
        Allow to ignore checking overridden methods (marked with Override or java.lang.Override annotation).
    • Method Detail

      • setIllegalClassNames

        public void setIllegalClassNames​(java.lang.String... classNames)
        Setter to specify throw class names to reject.
        Parameters:
        classNames - array of illegal exception classes
      • 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
      • isIgnorableMethod

        private boolean isIgnorableMethod​(DetailAST methodDef)
        Checks if current method is ignorable due to Check's properties.
        Parameters:
        methodDef - METHOD_DEF
        Returns:
        true if method is ignorable.
      • shouldIgnoreMethod

        private boolean shouldIgnoreMethod​(java.lang.String name)
        Check if the method is specified in the ignore method list.
        Parameters:
        name - the name to check
        Returns:
        whether the method with the passed name should be ignored
      • setIgnoredMethodNames

        public void setIgnoredMethodNames​(java.lang.String... methodNames)
        Setter to specify names of methods to ignore.
        Parameters:
        methodNames - array of ignored method names
      • setIgnoreOverriddenMethods

        public void setIgnoreOverriddenMethods​(boolean ignoreOverriddenMethods)
        Setter to allow to ignore checking overridden methods (marked with Override or java.lang.Override annotation).
        Parameters:
        ignoreOverriddenMethods - Check's property.