Back to Intellij Community

NonExhaustiveWhenStatementMigration

plugins/kotlin/code-insight/descriptions/resources-en/inspectionDescriptions/NonExhaustiveWhenStatementMigration.html

2025.3-rc-21.2 KB
Original Source

Reports a non-exhaustive when statements that will lead to compilation error since 1.7.

Motivation types:

  • Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)

    • Code is error-prone
  • Inconsistency in the design (things are done differently in different contexts)

Impact types:

  • Compilation. Some code that used to compile won't compile any more
    • There were cases when such code worked with no exceptions
      • Some such code could compile without any warnings

More details: KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default

The quick-fix adds the missing else -> {} branch.

Example:

sealed class Base {
      class A : Base()
      class B : Base()
  }

  fun test(base: Base) {
      when (base) {
          is Base.A -> ""
      }
  }

After the quick-fix is applied:

sealed class Base {
      class A : Base()
      class B : Base()
  }

  fun test(base: Base) {
      when (base) {
          is Base.A -> ""
          else -> {}
      }
  }

This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.