非自明な条件と値で、常に true、false、null、またはゼロになることが静的に分かっているものを報告します。 これは意図的な場合もありますが、多くの場合はプログラムのロジックに問題があることを示唆しています。 また、常に到達不可能な when 分岐と、常に失敗すると静的に分かっている一部の式を報告します。

例:


fun process(x: Int?) {
  val isNull = x == null
  if (!isNull) {
    if (x != null) {} // 条件は常に true です
    require(x!! < 0 && x > 10) // 条件は常に false です
  } else {
    println(x!!) // !! 演算子は常に失敗します
  }
}
fun process(v: Any) {
  when(v) {
    is CharSequence -> println(v as Int) // キャストは常に失敗します
    is String -> println(v) // 分岐は到達不能です
  }
}

条件にない定数値を持つ変数の報告を避けるには、「定数が変数に保管された場合に警告する」オプションのチェックを解除します。

2021.3 の新機能です