Class EmptyLineSeparatorCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class EmptyLineSeparatorCheck
    extends AbstractCheck

    Checks for empty line separators after header, package, all import declarations, fields, constructors, methods, nested classes, static initializers and instance initializers.

    ATTENTION: empty line separator is required between token siblings, not after line where token is found. If token does not have same type sibling then empty line is required at its end (for example for CLASS_DEF it is after '}'). Also, trailing comments are skipped.

    ATTENTION: violations from multiple empty lines cannot be suppressed via XPath: #8179.

    To configure the default check:

     <module name="EmptyLineSeparator"/>
     

    Example of declarations without empty line separator:

     ///////////////////////////////////////////////////
     //HEADER
     ///////////////////////////////////////////////////
     package com.puppycrawl.tools.checkstyle.whitespace;
     import java.io.Serializable;
     class Foo {
       public static final int FOO_CONST = 1;
       public void foo() {} //should be separated from previous statement.
     }
     

    Example of declarations with empty line separator that is expected by the Check by default:

     ///////////////////////////////////////////////////
     //HEADER
     ///////////////////////////////////////////////////
    
     package com.puppycrawl.tools.checkstyle.whitespace;
    
     import java.io.Serializable;
    
     class Foo {
       public static final int FOO_CONST = 1;
    
       public void foo() {}
     }
     

    To check empty line after VARIABLE_DEF and METHOD_DEF:

     <module name="EmptyLineSeparator">
       <property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/>
     </module>
     

    To allow no empty line between fields:

     <module name="EmptyLineSeparator">
       <property name="allowNoEmptyLineBetweenFields" value="true"/>
     </module>
     

    Example of declarations with multiple empty lines between class members (allowed by default):

     ///////////////////////////////////////////////////
     //HEADER
     ///////////////////////////////////////////////////
    
    
     package com.puppycrawl.tools.checkstyle.whitespace;
    
    
    
     import java.io.Serializable;
    
    
     class Foo {
       public static final int FOO_CONST = 1;
    
    
    
       public void foo() {} //should be separated from previous statement.
     }
     

    To disallow multiple empty lines between class members:

     <module name="EmptyLineSeparator">
       <property name="allowMultipleEmptyLines" value="false"/>
     </module>
     

    To disallow multiple empty lines inside constructor, initialization block and method:

     <module name="EmptyLineSeparator">
       <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
     </module>
     

    The check is valid only for statements that have body: CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF.

    Example of declarations with multiple empty lines inside method:

     ///////////////////////////////////////////////////
     //HEADER
     ///////////////////////////////////////////////////
    
     package com.puppycrawl.tools.checkstyle.whitespace;
    
     class Foo {
    
       public void foo() {
    
    
         System.out.println(1); // violation since method has 2 empty lines subsequently
       }
     }
     

    To disallow multiple empty lines between class members:

     <module name="EmptyLineSeparator">
       <property name="allowMultipleEmptyLines" value="false"/>
     </module>
     

    Example:

     package com.puppycrawl.tools.checkstyle.whitespace;
    
     class Test {
         private int k;
    
    
         private static void foo() {} // violation, before this like there two empty lines
    
     }
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • empty.line.separator
    • empty.line.separator.multiple.lines
    • empty.line.separator.multiple.lines.after
    • empty.line.separator.multiple.lines.inside
    Since:
    5.8
    • Field Detail

      • MSG_SHOULD_BE_SEPARATED

        public static final java.lang.String MSG_SHOULD_BE_SEPARATED
        A key is pointing to the warning message empty.line.separator in "messages.properties" file.
        See Also:
        Constant Field Values
      • MSG_MULTIPLE_LINES

        public static final java.lang.String MSG_MULTIPLE_LINES
        A key is pointing to the warning message empty.line.separator.multiple.lines in "messages.properties" file.
        See Also:
        Constant Field Values
      • MSG_MULTIPLE_LINES_AFTER

        public static final java.lang.String MSG_MULTIPLE_LINES_AFTER
        A key is pointing to the warning message empty.line.separator.lines.after in "messages.properties" file.
        See Also:
        Constant Field Values
      • MSG_MULTIPLE_LINES_INSIDE

        public static final java.lang.String MSG_MULTIPLE_LINES_INSIDE
        A key is pointing to the warning message empty.line.separator.multiple.lines.inside in "messages.properties" file.
        See Also:
        Constant Field Values
    • Constructor Detail

      • EmptyLineSeparatorCheck

        public EmptyLineSeparatorCheck()
    • Method Detail

      • setAllowNoEmptyLineBetweenFields

        public final void setAllowNoEmptyLineBetweenFields​(boolean allow)
        Setter to allow no empty line between fields.
        Parameters:
        allow - User's value.
      • setAllowMultipleEmptyLines

        public void setAllowMultipleEmptyLines​(boolean allow)
        Setter to allow multiple empty lines between class members.
        Parameters:
        allow - User's value.
      • setAllowMultipleEmptyLinesInsideClassMembers

        public void setAllowMultipleEmptyLinesInsideClassMembers​(boolean allow)
        Setter to allow multiple empty lines inside class members.
        Parameters:
        allow - User's value.
      • isCommentNodesRequired

        public boolean isCommentNodesRequired()
        Description copied from class: AbstractCheck
        Whether comment nodes are required or not.
        Overrides:
        isCommentNodesRequired in class AbstractCheck
        Returns:
        false as a default value.
      • 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