Checkstyle

Version 1.5 von Celina Bock am 2025/07/08 09:31

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,

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

<module name="Checker">
    <!    artemis conifg >
    <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>

    <!    gdp checks>
    <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>