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 Details

    • MSG_KEY_NEED_BRACES

      public static final String MSG_KEY_NEED_BRACES
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
  • Constructor Details

    • NeedBracesCheck

      public NeedBracesCheck()
  • Method Details

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