FallThrough
検証環境
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++; } } }