Class NeedBracesCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class NeedBracesCheck
    extends AbstractCheck

    Checks for braces around code blocks.

    By default the check will check the following blocks: LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE.

    An example of how to configure the check is:

     <module name="NeedBraces"/>
     

    An example of how to configure the check for if and else blocks is:

     <module name="NeedBraces">
         <property name="tokens" value="LITERAL_IF, LITERAL_ELSE"/>
     </module>
     
    Check has the following options:

    allowSingleLineStatement which allows single-line statements without braces, e.g.:

    if (obj.isValid()) return true;

    while (obj.isValid()) return true;

    do this.notify(); while (o != null);

    for (int i = 0; ; ) this.notify();

    allowEmptyLoopBody which allows loops with empty bodies, e.g.:

    while (value.incrementValue() < 5);

    for(int i = 0; i < 10; value.incrementValue());

    Default value for allowEmptyLoopBody option is false.

    To configure the Check to allow case, default single-line statements without braces:

     <module name="NeedBraces">
         <property name="tokens" value="LITERAL_CASE, LITERAL_DEFAULT"/>
         <property name="allowSingleLineStatement" value="true"/>
     </module>
     

    Such statements would be allowed:

     
     switch (num) {
         case 1: counter++; break; // OK
         case 6: counter += 10; break; // OK
         default: counter = 100; break; // OK
     }
     
     

    To configure the Check to allow while, for loops with empty bodies:

     <module name="NeedBraces">
         <property name="allowEmptyLoopBody" value="true"/>
     </module>
     

    Such statements would be allowed:

     
     while (value.incrementValue() &lt; 5); // OK
     for(int i = 0; i &lt; 10; value.incrementValue()); // OK
     
     
    • Field Detail

      • MSG_KEY_NEED_BRACES

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

      • NeedBracesCheck

        public NeedBracesCheck()
    • Method Detail

      • setAllowSingleLineStatement

        public void setAllowSingleLineStatement​(boolean allowSingleLineStatement)
        Setter.
        Parameters:
        allowSingleLineStatement - Check's option for skipping single-line statements
      • setAllowEmptyLoopBody

        public void setAllowEmptyLoopBody​(boolean allowEmptyLoopBody)
        Sets whether to allow empty loop body.
        Parameters:
        allowEmptyLoopBody - Check's option for allowing loops with empty body.
      • 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:
        TokenTypes
      • 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
      • 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:
        TokenTypes