Checkstyle Javaルール

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

EmptyBlock

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

空のブロックがないかチェックする。
以下のようなシーケンシャルブロックはチェック対象外となる。また、フォールスルーの検出も行われない。

switch (a) {
  case 1:
  case 2:
  case 3: someMethod(); {}
  default: break;
}

ブロックが空かどうかの判定にはBlockOptionを指定する。

説明
text ブロック内にテキスト(コメントでも可)があることを要求する
statement ブロック内にステートメント(コメント不可)があることを要求する
// text
// OK
catch (Exception ex) {
    // コメント
}

// NG
catch (Exception ex) {
}

// statement
// OK
catch (Exception ex) {
    ex.printStackTrace();
}

// NG
catch (Exception ex) {
    // コメント
}

プロパティ

プロパティ デフォルト値 説明 追加バージョン
option BlockOption statement ブロックの内容に関するポリシー 3.0
tokens トークンの サブセット LITERAL_WHILE,
LITERAL_TRY,
LITERAL_FINALLY,
LITERAL_DO,
LITERAL_IF,
LITERAL_ELSE,
LITERAL_FOR,
INSTANCE_INIT,
STATIC_INIT,
LITERAL_SWITCH,
LITERAL_SYNCHRONIZED
チェック対象のトーク 3.0

トークンのサブセットには以下の値が設定可能

説明
ARRAY_INIT 配列の初期化
INSTANCE_INIT インスタンスイニシャライザ
LITERAL_CASE case
LITERAL_CATCH catch
LITERAL_DEFAULT default
LITERAL_DO do
LITERAL_ELSE else
LITERAL_FINALLY finally
LITERAL_FOR for
LITERAL_IF if
LITERAL_SWITCH switch
LITERAL_SYNCHRONIZED synchronized
LITERAL_TRY try
LITERAL_WHILE while
STATIC_INIT スタティックイニシャライザ

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

public class MyClass {
    private void foo() {
        // NG forブロック内部に処理が何もない
        for (int i = 0; i < 10; i++) {
        }

        // NG tryブロック内部に処理が何もない
        try {
        // OK デフォルトではcatchはチェック対象外
        } catch (Exception e) {
            // コメント
        }
    }
}

プロパティ設定あり

option

ブロックの内容に関するポリシーを設定する。
デフォルトではブロック内にステートメント(コメントのみはNG)を必要とする設定となっている。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyBlock">
            <property name="option" value="text"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {
    private void foo() {
        // OK 「option=text」のため、コメントが記載してあればOK
        for (int i = 0; i < 10; i++) {
            // コメント
        }

        // NG tryブロック内部に処理もコメントもない
        try {
        } catch (Exception e) { // OK デフォルトではcatchはチェック対象外
            // コメント
        }
    }
}

tokens

チェック対象のトークンをコンマ区切りで記述する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyBlock">
            <property name="tokens" value="LITERAL_TRY,LITERAL_CATCH"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {
    private void foo() {
        // OK プロパティによりチェック対象外
        for (int i = 0; i < 10; i++) {
        }

        // NG tryブロック内部に処理が何もない
        try {
        // NG catchブロック内部に処理が何もない
        } catch (Exception e) {
            // コメント
        }
    }
}