例:
void finishApplication() {
System.exit(0);
System.out.println("Application is terminated"); // 到達不可能なコード
}
このインスペクションはメソッドのコントラクト推論に依存することに注意してください。 特に、常に例外をスローする static または final メソッドを 呼び出す場合、「常に失敗」コントラクトが推論され、メソッド呼び出し後のコードは 到達不可能と見なされます。 例:
void run() {
performAction();
System.out.println("Action is performed"); // 到達不可能なコード
}
static void performAction() {
throw new AssertionError();
}
これにより、使用されるコード後処理がどんな種類のものであれ、例えば、アノテーションプロセッサーが後でメソッド本体を何か役立つものに置換する場合でも、
誤検知が引き起こされる可能性があります。 誤検知の警告を回避するには、org.jetbrains:annotations パッケージの明示的な
@org.jetbrains.annotations.Contract アノテーションを使用すると自動コントラクト推論を抑止できます。
void run() {
performAction();
System.out.println("Action is performed"); // 警告はありません
}
@Contract("-> _") // 実装は置換されます
static void performAction() {
throw new AssertionError();
}
2024.1 の新機能です