例:
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 の新機能です