<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
          "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">
    <!-- See http://checkstyle.sourceforge.net/config_misc.html#NewlineAtEndOfFile -->
    <module name="NewlineAtEndOfFile">
        <property name="lineSeparator" value="lf_cr_crlf"/>
    </module>

    <!-- See http://checkstyle.sourceforge.net/config_whitespace.html -->
    <module name="FileTabCharacter"/>

    <!-- See http://checkstyle.sourceforge.net/config_misc.html -->
    <module name="RegexpSingleline">
        <property name="format" value="\s+$"/>
        <property name="minimum" value="0"/>
        <property name="maximum" value="0"/>
        <property name="message" value="Line has trailing spaces."/>
    </module>

    <module name="TreeWalker">
        <!-- See https://checkstyle.org/config_javadoc.html -->
        <module name="AtclauseOrder"/>
        <module name="InvalidJavadocPosition"/>
        <module name="JavadocBlockTagLocation"/>
        <module name="JavadocContentLocationCheck"/>
        <module name="JavadocMethod"/>
        <module name="JavadocType"/>
        <module name="MissingJavadocPackage"/>
        <module name="NonEmptyAtclauseDescription"/>

        <!-- See http://checkstyle.sourceforge.net/config_filters.html -->
        <module name="SuppressionCommentFilter"/>
        <module name="SuppressWarningsHolder"/>

        <!-- See http://checkstyle.sourceforge.net/config_imports.html -->
        <module name="ImportOrder">
            <property name="option" value="above"/>
            <property name="ordered" value="true"/>
            <property name="separatedStaticGroups" value="true"/>
            <property name="sortStaticImportsAlphabetically" value="true"/>
        </module>
        <module name="RedundantImport"/>
        <module name="UnusedImports"/>

        <!-- See https://checkstyle.org/config_whitespace.html -->
        <module name="GenericWhitespace"/>
        <module name="MethodParamPad"/>
        <module name="NoLineWrap"/>
        <module name="NoWhitespaceAfter"/>
        <module name="NoWhitespaceBefore"/>
        <module name="OperatorWrap"/>
        <module name="ParenPad">
            <property name="option" value="nospace"/>
            <property name="tokens" value="ANNOTATION, CTOR_DEF, METHOD_DEF, LAMBDA"/>
        </module>
        <module name="ParenPad">
            <property name="option" value="space"/>
            <property name="tokens" value="ANNOTATION_FIELD_DEF, CTOR_CALL, DOT, ENUM_CONSTANT_DEF, EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, RECORD_DEF"/>
        </module>
        <module name="SingleSpaceSeparator"/>
        <module name="TypecastParenPad"/>
        <module name="WhitespaceAfter"/>
        <module name="WhitespaceAround"/>

        <!-- See http://checkstyle.sourceforge.net/config_modifiers.html -->
        <module name="ModifierOrder"/>

        <!-- See https://checkstyle.org/config_blocks.html -->
        <module name="AvoidNestedBlocks"/>
        <module name="LeftCurly">
            <property name="option" value="nl"/>
        </module>
        <module name="RightCurly"/>

        <!-- See http://checkstyle.sourceforge.net/config_design.html -->
        <module name="FinalClass"/>

        <!-- See http://checkstyle.sourceforge.net/config_misc.html -->
        <module name="ArrayTypeStyle"/>
        <module name="CommentsIndentation"/>
        <module name="Indentation"/>
        <module name="UpperEll"/>
    </module>

    <module name="SuppressWarningsFilter"/>
</module>