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

<!--
    Checkstyle-Configuration: Prog
    Description: Prog Sheet 2
-->
<module name="Checker">
    <property name="severity" value="warning"/>

    <!-- Blatt 1 -->
    <module name="LineLength">
        <property name="max" value="140"/>
    </module>
    <module name="FileLength">
        <property name="severity" value="warning"/>
        <property name="max" value="400"/>
    </module>
    <module name="FileTabCharacter">
        <property name="severity" value="warning"/>
        <property name="eachLine" value="true"/>
        <property name="fileExtensions" value="java"/>
    </module>

    <module name="TreeWalker">
        <property name="severity" value="warning"/>

        <module name="LocalFinalVariableName">
            <property name="severity" value="warning"/>
        </module>
        <module name="LocalVariableName">
            <property name="severity" value="warning"/>
        </module>
        <module name="MemberName">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodName">
            <property name="severity" value="warning"/>
        </module>
        <module name="ParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="TypeName">
            <property name="severity" value="warning"/>
        </module>
        <module name="AvoidStarImport">
            <property name="severity" value="warning"/>
        </module>
        <module name="RedundantImport">
            <property name="severity" value="warning"/>
        </module>
        <module name="UnusedImports">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodLength">
            <property name="severity" value="warning"/>
            <property name="max" value="60"/>
            <property name="tokens" value="METHOD_DEF"/>
        </module>
        <module name="AnonInnerLength">
            <property name="severity" value="warning"/>
            <property name="max" value="60"/>
        </module>
        <module name="ParameterNumber">
            <property name="severity" value="warning"/>
        </module>
        <module name="EmptyForIteratorPad">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoWhitespaceAfter">
            <property name="severity" value="warning"/>
            <property name="tokens" value="INC,DEC,UNARY_MINUS,UNARY_PLUS,BNOT,LNOT,DOT,METHOD_REF"/>
        </module>
        <module name="WhitespaceAround">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoWhitespaceBefore">
            <property name="severity" value="warning"/>
            <property name="tokens" value="COMMA,SEMI,POST_INC,POST_DEC,ELLIPSIS,LABELED_STAT,METHOD_REF"/>
        </module>
        <module name="OperatorWrap">
            <property name="severity" value="warning"/>
            <property name="tokens" value="QUESTION,COLON,EQUAL,NOT_EQUAL,DIV,PLUS,MINUS,STAR,MOD,SR,BSR,GE,GT,SL,LE,LT,BXOR,BOR,LOR,BAND,LAND,LITERAL_INSTANCEOF,TYPE_EXTENSION_AND"/>
        </module>
        <module name="ParenPad">
            <property name="severity" value="warning"/>
        </module>
        <module name="WhitespaceAfter">
            <property name="severity" value="warning"/>
        </module>
        <module name="AvoidNestedBlocks">
            <property name="severity" value="warning"/>
        </module>
        <module name="LeftCurly">
            <property name="severity" value="warning"/>
        </module>
        <module name="NeedBraces">
            <property name="severity" value="warning"/>
        </module>
        <module name="RightCurly">
            <property name="severity" value="warning"/>
        </module>
        <module name="UpperEll">
            <property name="severity" value="warning"/>
        </module>
        <module name="ModifierOrder">
            <property name="severity" value="warning"/>
        </module>
        <module name="ArrayTypeStyle">
            <property name="severity" value="warning"/>
        </module>
        <module name="EmptyStatement">
            <property name="severity" value="warning"/>
        </module>
        <module name="ClassTypeParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodTypeParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodParamPad">
            <property name="severity" value="warning"/>
        </module>
        <module name="TypecastParenPad">
            <property name="severity" value="warning"/>
        </module>
        <module name="OuterTypeNumber">
            <property name="severity" value="warning"/>
        </module>
        <module name="MultipleVariableDeclarations">
            <property name="severity" value="warning"/>
        </module>
        <module name="DefaultComesLast">
            <property name="severity" value="warning"/>
        </module>
        <!-- Checks for any use of @SupressWarnings. ! -->
        <module name="SuppressWarnings">
            <property name="format" value=".*"/>
            <property name="severity" value="warning"/>
            <message key="suppressed.warning.not.allowed" value="The warning {0} must not be suppressed."/>
        </module>
        <module name="OneTopLevelClass">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoCodeInFile">
            <property name="severity" value="warning"/>
        </module>
        <module name="OuterTypeFilename">
            <property name="severity" value="warning"/>
        </module>
        <module name="TodoComment">
            <property name="severity" value="warning"/>
            <property name="format" value="TODO|FIXME|XXX"/>
        </module>
        <module name="ConstantName">
            <property name="severity" value="warning"/>
        </module>
        <module name="IllegalIdentifierName">
            <property name="severity" value="warning"/>
        </module>
        <module name="InterfaceTypeParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="LambdaParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="RecordTypeParameterName">
            <property name="severity" value="warning"/>
        </module>
        <module name="StaticVariableName">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodLength">
            <property name="severity" value="warning"/>
            <property name="max" value="30"/>
            <property name="tokens" value="CTOR_DEF,COMPACT_CTOR_DEF"/>
        </module>
        <module name="LambdaBodyLength"/>
        <module name="MethodCount">
            <property name="severity" value="warning"/>
            <property name="maxTotal" value="25"/>
            <property name="maxPrivate" value="25"/>
            <property name="maxPackage" value="25"/>
            <property name="maxProtected" value="25"/>
            <property name="maxPublic" value="25"/>
        </module>
        <module name="GenericWhitespace">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoWhitespaceBeforeCaseDefaultColon">
            <property name="severity" value="warning"/>
        </module>
        <module name="DeclarationOrder">
            <property name="severity" value="warning"/>
        </module>
        <module name="NestedForDepth">
            <property name="severity" value="warning"/>
            <property name="max" value="3"/>
        </module>
        <module name="NestedIfDepth">
            <property name="severity" value="warning"/>
            <property name="max" value="4"/>
        </module>
        <module name="NestedTryDepth">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoClone">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoEnumTrailingComma">
            <property name="severity" value="warning"/>
        </module>
        <module name="NoFinalizer">
            <property name="severity" value="warning"/>
        </module>
        <module name="OneStatementPerLine">
            <property name="severity" value="warning"/>
        </module>
        <module name="StringLiteralEquality">
            <property name="severity" value="warning"/>
        </module>
        <module name="UnusedLocalVariable">
            <property name="severity" value="warning"/>
        </module>
        <module name="Indentation">
            <property name="severity" value="warning"/>
        </module>
        <module name="IllegalToken">
            <property name="severity" value="warning"/>
        </module>
        <module name="InnerAssignment">
            <property name="severity" value="warning"/>
        </module>
        <module name="ModifiedControlVariable">
            <property name="severity" value="warning"/>
        </module>
        <!-- Checks that particular classes or interfaces are never used. ! -->
        <module name="IllegalType">
            <property name="illegalClassNames" value="java.util.Date, java.util.Vector, java.util.Hashtable, java.util.Stack"/>
            <message key="illegal.type" value="Type ''{0}'' is obsolete and must not be used even if the corresponding package is allowed."/>
        </module>

        <!-- Blatt 2 -->
        <module name="RedundantModifier">
            <property name="severity" value="warning"/>
        </module>
        <module name="EmptyBlock">
            <property name="severity" value="warning"/>
            <property name="tokens" value="LITERAL_WHILE,LITERAL_TRY,LITERAL_CATCH,LITERAL_FINALLY,LITERAL_DO,LITERAL_IF,LITERAL_ELSE,LITERAL_FOR,INSTANCE_INIT,STATIC_INIT,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_CASE,LITERAL_DEFAULT,ARRAY_INIT"/>
            <property name="option" value="text"/>
        </module>
        <module name="PackageName">
            <property name="severity" value="warning"/>
            <property name="format" value="^[a-z]+(\.[a-z][a-z_]*[a-z])*$"/>
        </module>
        <module name="MissingSwitchDefault">
            <property name="severity" value="warning"/>
        </module>
        <module name="PackageDeclaration">
            <property name="severity" value="warning"/>
        </module>
        <module name="ParameterAssignment">
            <property name="severity" value="warning"/>
        </module>
        <module name="IllegalInstantiation">
            <property name="severity" value="warning"/>
        </module>
    </module>
</module>
