Checkstyle Javaルール

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

EmptyCatchBlock

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

空のcatchブロックがあるかどうかをチェックする。
デフォルトでは、catchブロック内部にコメントのみを持つcatchブロックは空とみなさない。
このチェックにはオプションが2つあるが、片方にマッチングすれば、対象のcatchブロックは空とみなされなくなる。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
exceptionVariableName Pattern "^$" 空のcatchブロックを許可する例外の変数名の正規表現 6.4
commentFormat Pattern ".*" 空のcatchブロックを許可する最初のコメントの正規表現 6.4

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

// NG catchブロックが空なのでNG
try {
  throw new RuntimeException();
} catch (RuntimeException expected) {
}

// NG catchブロックが空なのでNG
try {
  throw new RuntimeException();
} catch (RuntimeException o) {
}

// OK catchブロックにコメントがあるのでOK
try {
  throw new RuntimeException();
} catch (RuntimeException ignore) {
  // no handling
}

// OK catchブロックにコメントがあるのでOK
try {
  throw new RuntimeException();
} catch (RuntimeException ex) {
  // This is expected
}

プロパティ設定あり

exceptionVariableName

空のcatchブロックを許可する例外の変数名の正規表現を設定する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyCatchBlock">
            <property name="exceptionVariableName" value="expected|ignore"/>
        </module>
    </module>
</module>

チェック実行例

// OK 「exceptionVariableName」に指定の変数名と合致するため空でもOK
try {
  throw new RuntimeException();
} catch (RuntimeException expected) {
}

// NG 「exceptionVariableName」に指定の変数名と合致しないため空は許容されない
try {
  throw new RuntimeException();
} catch (RuntimeException o) {
}

// OK 「exceptionVariableName」に指定の変数名と合致するため空でもOK
try {
  throw new RuntimeException();
} catch (RuntimeException ignore) {
  // no handling
}

// OK catchブロックにコメントがあるのでOK
try {
  throw new RuntimeException();
} catch (RuntimeException ex) {
  // This is expected
}

commentFormat

空のcatchブロックを許可する最初のコメントの正規表現を設定する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="EmptyCatchBlock">
            <property name="commentFormat" value="This is expected"/>
        </module>
    </module>
</module>

チェック実行例

// NG catchブロックが空なのでNG
try {
  throw new RuntimeException();
} catch (RuntimeException expected) {
}

// NG catchブロックが空なのでNG
try {
  throw new RuntimeException();
} catch (RuntimeException o) {
}

// NG 「commentFormat」に指定のコメントと合致しないため空は許容されない
try {
  throw new RuntimeException();
} catch (RuntimeException ignore) {
  // no handling
}

// OK catchブロックの最初のコメントに「commentFormat」に指定のコメントがあるのでOK
try {
  throw new RuntimeException();
} catch (RuntimeException ex) {
  // This is expected
}