Class NeedBracesCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class NeedBracesCheck
    extends AbstractCheck

    Checks for braces around code blocks.

    • Property allowSingleLineStatement - allow single-line statements without braces. Type is boolean. Default value is false.
    • Property allowEmptyLoopBody - allow loops with empty bodies. Type is boolean. Default value is false.
    • Property tokens - tokens to check Type is java.lang.String[]. Validation type is tokenSet. Default value is: LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE.

    To configure the check:

     <module name="NeedBraces"/>
     

    To configure the check for if and else blocks:

     <module name="NeedBraces">
       <property name="tokens" value="LITERAL_IF, LITERAL_ELSE"/>
     </module>
     

    To configure the check to allow single-line statements (if, while, do-while, for) without braces:

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

    Next statements won't be violated by check:

     if (obj.isValid()) return true; // OK
     while (obj.isValid()) return true; // OK
     do this.notify(); while (o != null); // OK
     for (int i = 0; ; ) this.notify(); // OK
     

    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>
     

    Next statements won't be violated by check:

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

    To configure the check to allow loops (while, for) with empty bodies:

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

    Next statements won't be violated by check:

     while (value.incrementValue() < 5); // OK
     for(int i = 0; i < 10; value.incrementValue()); // OK
     

    To configure the check to lambdas:

     <module name="NeedBraces">
       <property name="tokens" value="LAMBDA"/>
       <property name="allowSingleLineStatement" value="true"/>
     </module>
     

    Results in following:

     allowedFuture.addCallback(result -> assertEquals("Invalid response",
       EnumSet.of(HttpMethod.GET, HttpMethod.OPTIONS), result), // violation, lambda spans 2 lines
       ex -> fail(ex.getMessage())); // OK
    
     allowedFuture.addCallback(result -> {
       return assertEquals("Invalid response",
         EnumSet.of(HttpMethod.GET, HttpMethod.OPTIONS), result);
       }, // OK
       ex -> fail(ex.getMessage()));
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • needBraces
    Since:
    3.0
    • 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 to allow single-line statements without braces.
        Parameters:
        allowSingleLineStatement - Check's option for skipping single-line statements
      • setAllowEmptyLoopBody

        public void setAllowEmptyLoopBody​(boolean allowEmptyLoopBody)
        Setter to allow loops with empty bodies.
        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