Checkstyle Javaルール

CheckstyleのJavaルールについて1つずつまとめます

FallThrough

CheckStyle公式ドキュメント

検証環境

Checkstyleバージョン:10.3.3
Javaバージョン:17


チェック概要

switch の case にコードが含まれているが、break、return、throw、continue文がない箇所がないかどうかをチェックする。

チェックは、警告を抑制するための特別なコメントを許容する。
デフォルトでは、テキスト "fallthru", "fall-thru", "fall-thru", "fallthrough", "fallsthrough", "falls through", "falls-through" (大文字小文字を区別する) が使用される。
これらのコメントはすべて1行で、警告のトリガーとなるcaseの前の空でない最後の行、またはcaseの前の同じ行に記述する必要がある。
このチェックでは、ケース内に到達不可能なコードが存在しないことを前提としている。

チェック追加バージョン
Checkstyle 3.4

プロパティ

プロパティ デフォルト値 説明 追加バージョン
checkLastCaseGroup boolean false 最後のcaseをチェックするかどうか 4.0
reliefPattern Pattern "falls?[ -]?thr(u|ough)" 警告を抑制するコメントの正規表現 4.0

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="FallThrough"/>
    </module>
</module>

チェック実行例

public void foo() throws Exception {
    int i = 0;
    while (i >= 0) {
        switch (i) {
            // NG caseにコードが含まれているのに
            // break, return, continueなどが記述されていない
            case 1:
                i++;
            case 2:
                i++;
                break;
            // チェック抑制のコメントがあるのでOK
            case 3:
                i++;
                // fall-through
            // 最後のケースはチェックされないためOK
            case 4:
                i++;
        }
    }
}

プロパティ設定あり

checkLastCaseGroup

trueを設定した場合、最後のcaseをチェックする(デフォルト:false)

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="FallThrough">
            <property name="checkLastCaseGroup" value="true"/>
        </module>
    </module>
</module>

チェック実行例

public void foo() throws Exception {
    int i = 0;
    while (i >= 0) {
        switch (i) {
            // NG caseにコードが含まれているのに
            // break, return, continueなどが記述されていない
            case 1:
                i++;
            case 2:
                i++;
                break;
            // チェック抑制のコメントがあるのでOK
            case 3:
                i++;
                // fall-through
            // NG 「checkLastCaseGroup=true」なので最後のケースもチェックされる
            case 4:
                i++;
        }
    }
}

reliefPattern

警告を抑制するコメントの正規表現

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="FallThrough">
            <property name="reliefPattern" value="FALL?[ -]?THROUGH"/>
        </module>
    </module>
</module>

チェック実行例

public void foo() throws Exception {
    int i = 0;
    while (i >= 0) {
        switch (i) {
            // NG caseにコードが含まれているのに
            // break, return, continueなどが記述されていない
            case 1:
                i++;
            case 2:
                i++;
                break;
            // NG チェック抑制のコメントが「reliefPattern」に設定した正規表現にマッチしないのでチェックされる
            case 3:
                i++;
                // fall-through
            // 最後のケースはチェックされないためOK
            case 4:
                i++;
        }
    }
}