[FIR] Fix Java sealed class inheritors

This fixes NO_ELSE_IN_WHEN diagnostics when using java sealed
classes in an exhaustive when.

#KT-58216 Fixed
This commit is contained in:
Kirill Rakhman
2023-09-07 12:17:59 +02:00
committed by Space Team
parent 6405a174e2
commit 16ae83bde0
6 changed files with 8 additions and 111 deletions
@@ -1,44 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// ISSUE: KT-41215, KT-43551
// FILE: Base.java
public sealed class Base permits A, B {}
// FILE: A.java
public final class A extends Base {}
// FILE: B.java
public sealed class B extends Base permits B.C, B.D {
public static final class C implements B {}
public static non-sealed class D extends B {}
}
// FILE: main.kt
fun test_ok_1(base: Base) {
val x = when (base) {
is A -> 1
is B -> 2
}
}
fun test_ok_2(base: Base) {
val x = when (base) {
is A -> 1
is B.C -> 2
is B.D -> 3
}
}
fun test_error_1(base: Base) {
val x = when (base) {
is A -> 1
}
}
fun test_error_2(base: Base) {
val x = when (base) {
is A -> 1
is B.C -> 2
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
// ISSUE: KT-41215, KT-43551
@@ -1,64 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// ISSUE: KT-41215, KT-43551
// FILE: Base.java
public sealed interface Base permits A, B, E {}
// FILE: A.java
public non-sealed interface A extends Base {}
// FILE: B.java
public sealed interface B extends Base permits B.C, B.D {
public static final class C implements B {}
public static non-sealed interface D extends B {}
}
// FILE: E.java
public enum E implements Base {
First, Second
}
// FILE: main.kt
fun test_ok_1(base: Base) {
val x = when (base) {
is A -> 1
is B -> 2
is E -> 3
}
}
fun test_ok_2(base: Base) {
val x = when (base) {
is A -> 1
is B.C -> 2
is B.D -> 3
E.First -> 4
E.Second -> 5
}
}
fun test_error_1(base: Base) {
val x = when (base) {
is A -> 1
is B -> 2
}
}
fun test_error_2(base: Base) {
val x = when (base) {
is A -> 1
is B.C -> 2
is B.D -> 3
E.Second -> 5
}
}
fun test_error_3(base: Base) {
val x = when (base) {
is A -> 1
is B.C -> 2
E.First -> 4
E.Second -> 5
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
// ISSUE: KT-41215, KT-43551