Checkstyle

Version 4.1 von Celina Bock am 2025/07/08 09:34

Für die Programmierfächer aus Semester 1 und 2 wurde Checkstyle eingeführt. Bei der Aufgabenerstellung muss der Haken bei "statische Codeanalyse" gesetzt werden. Späteres Hinzufügen von Checkstyle ist umständlich (Export in einen anderen Kurs, Löschen im alten Kurs, erneutes Importieren, dann Haken setzen).

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

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

    <property name="fileExtensions" value="java" />

    <! See https://checkstyle.org/filefilters/beforeexecutionexclusionfilefilter.html >

    <module name="BeforeExecutionExclusionFileFilter">
        <! Filtert alle Dateien, die nicht SortedArray heißen >
        <property name="fileNamePattern" value="^(?!.*([
/])?(SortedArray)\.java$).*" />
    </module
    <module name="TreeWalker">
        <property name="tabWidth" value="4" />
        <module name="JavadocMethod">
            <property name="accessModifiers" value="public" />
        </module>
        <module name="JavadocStyle">
            <property name="scope" value="public" />
            <property name="checkFirstSentence" value="false" />
        </module>
        <module name="LocalFinalVariableName" />
        <module name="LocalVariableName" />
        <module name="MemberName" />
        <module name="MethodName" />
        <module name="PackageName">
        </module>
        <module name="ParameterName" />
        <module name="StaticVariableName" />
        <module name="TypeName">
        </module>
        <module name="AvoidStarImport">
        </module>
        <module name="IllegalImport" />
        <module name="RedundantImport" />
        <module name="UnusedImports" />
        <module name="MethodLength">
            <property name="max" value="75" />
        </module>
        <module name="ParameterNumber">
        </module>
        <module name="EmptyForIteratorPad">
        </module>
        <module name="MethodParamPad">
        </module>
        <module name="NoWhitespaceAfter">
            <property name="tokens" value="LNOT,DOT,BNOT,DEC,UNARY_MINUS,UNARY_PLUS,INC,ARRAY_INIT" />
            <property name="severity" value="info" />
        </module>
        <module name="NoWhitespaceBefore">
            <property name="allowLineBreaks" value="true" />
            <property name="tokens" value="SEMI,DOT,POST_DEC,POST_INC" />
            <property name="severity" value="info" />
        </module>
        <module name="OperatorWrap">
        </module>
        <module name="ParenPad">
        </module>
        <module name="TypecastParenPad">
        </module>
        <module name="WhitespaceAfter">
            <property name="tokens" value="COMMA" />
            <property name="severity" value="info" />
        </module>
        <module name="WhitespaceAround">
            <property name="severity" value="info" />
        </module>
        <module name="AvoidNestedBlocks">
        </module>
        <module name="EmptyBlock">
        </module>
        <module name="LeftCurly">
        </module>
        <module name="NeedBraces">
            <property name="severity" value="info" />
        </module>
        <module name="EmptyStatement">
        </module>
        <module name="EqualsHashCode">
        </module>
        <module name="HiddenField">
            <property name="ignoreConstructorParameter" value="true" />
            <property name="ignoreSetter" value="true" />
        </module>
        <module name="InnerAssignment">
        </module>
        <module name="MissingSwitchDefault" />
        <module name="SimplifyBooleanExpression">
            <message key="simplify.expression" value="Der Ausdruck sollte vereinfacht werden." />
        </module>
        <module name="SimplifyBooleanReturn">
        </module>
        <module name="ArrayTypeStyle">
        </module>
        <module name="TodoComment">
        </module>
        <module name="UpperEll">
        </module>
        <module name="ReturnCount">
            <property name="max" value="8" />
        </module>
        <! <module name="MagicNumber">
            <metadata name="net.sf.eclipsecs.core.comment"
        value="-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9"/>
            <property name="ignoreNumbers" value="-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9"/>
            <property name="severity" value="info"/>
        </module> 
>
        <module name="ReturnCount">
            <property name="max" value="4" />
            <message key="return.count"
                value="Möglichst nicht mehr als {1,number,integer} return-Anweisungen." />
        </module>
        <module name="JavadocType">
            <property name="authorFormat" value=".{2,}" />
            <message key="type.tagFormat" value="Autor sollte mindestens zwei Buchstaben haben" />
        </module>
        <module name="JavadocVariable">
            <property name="scope" value="public" />
        </module>
        <module name="ConstantName">
            <message key="name.invalidPattern"
                value="Nur Großbuchstaben, Zahlen und Unterstriche für Konstanten verwenden." />
        </module>
        <module name="ModifierOrder">
        </module>
        <module name="CyclomaticComplexity">
            <property name="max" value="20" />
        </module>
        <module name="NPathComplexity">
            <property name="max" value="80" />
        </module>
        <module name="RightCurly">
        </module>
    </module>
    <module name="LineLength">
        <property name="max" value="140" />
        <property name="fileExtensions" value="java" />
        <property name="ignorePattern"
            value="^package.*|^import.*|a href|href|http://|https://|ftp://" />
    </module>

    <module name="JavadocPackage" />
    <module name="FileLength">
        <property name="max" value="1000" />
    </module>
    <module name="FileTabCharacter">
        <property name="severity" value="info" />
    </module>
    <module name="RegexpHeader">
        <property name="header" value="^package" />
        <message key="header.mismatch" value="Angabe eines Packages fehlt." />
    </module>

</module>