Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable when branches and some expressions that are statically known to fail always.

Examples:


fun process(x: Int?) {
  val isNull = x == null
  if (!isNull) {
    if (x != null) {} // condition is always true
    require(x!! < 0 && x > 10) // condition is always false
  } else {
    println(x!!) // !! operator will always fail
  }
}
fun process(v: Any) {
  when(v) {
    is CharSequence -> println(v as Int) // cast will always fail
    is String -> println(v) // branch is unreachable
  }
}

New in 2021.3