[FIR] Support when exhaustiveness for java enum
The problem appear because for java enum its entries was represented by FirJavaField. To fix this FirEnumEntry was used #KT-39621 Fixed
This commit is contained in:
+3
-6
@@ -11,8 +11,7 @@ public/*package*/ open class A : R|kotlin/Any| {
|
||||
|
||||
}
|
||||
public final enum class Mixed : R|kotlin/Enum<ft<Mixed, Mixed?>!>| {
|
||||
public final static field NOT_ENTRY_EITHER: R|Mixed|
|
||||
|
||||
public final static enum entry NOT_ENTRY_EITHER: R|Mixed|
|
||||
public final static fun values(): R|kotlin/Array<Mixed>| {
|
||||
}
|
||||
|
||||
@@ -21,10 +20,8 @@ public final enum class Mixed : R|kotlin/Enum<ft<Mixed, Mixed?>!>| {
|
||||
|
||||
}
|
||||
public final enum class Signs : R|kotlin/Enum<ft<Signs, Signs?>!>| {
|
||||
public final static field HELLO: R|Signs|
|
||||
|
||||
public final static field WORLD: R|Signs|
|
||||
|
||||
public final static enum entry HELLO: R|Signs|
|
||||
public final static enum entry WORLD: R|Signs|
|
||||
public final static field X: R|ft<Signs, Signs?>!|
|
||||
|
||||
public final static fun values(): R|kotlin/Array<Signs>| {
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
// FILE: JavaEnum.java
|
||||
public enum JavaEnum {
|
||||
A, B, C;
|
||||
|
||||
public int i = 0;
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
fun test_1(e: JavaEnum) {
|
||||
val a = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
}.<!UNRESOLVED_REFERENCE!>plus<!>(0)
|
||||
|
||||
val b = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
is String -> 3
|
||||
}.<!UNRESOLVED_REFERENCE!>plus<!>(0)
|
||||
|
||||
val c = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
JavaEnum.C -> 3
|
||||
}.plus(0)
|
||||
|
||||
val d = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
else -> 2
|
||||
}.plus(0)
|
||||
}
|
||||
|
||||
fun test_2(e: JavaEnum?) {
|
||||
val a = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
JavaEnum.C -> 3
|
||||
}.<!UNRESOLVED_REFERENCE!>plus<!>(0)
|
||||
|
||||
val a = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
JavaEnum.C -> 3
|
||||
null -> 4
|
||||
}.plus(0)
|
||||
|
||||
val a = when (e) {
|
||||
JavaEnum.A -> 1
|
||||
JavaEnum.B -> 2
|
||||
JavaEnum.C -> 3
|
||||
else -> 4
|
||||
}.plus(0)
|
||||
}
|
||||
|
||||
fun test_3(e: JavaEnum) {
|
||||
val a = when (e) {
|
||||
JavaEnum.A, JavaEnum.B -> 1
|
||||
JavaEnum.C -> 2
|
||||
}.plus(0)
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
FILE: main.kt
|
||||
public final fun test_1(e: R|JavaEnum|): R|kotlin/Unit| {
|
||||
lval a: <ERROR TYPE REF: Unresolved name: plus> = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
}
|
||||
.<Unresolved name: plus>#(Int(0))
|
||||
lval b: <ERROR TYPE REF: Unresolved name: plus> = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
($subj$ is R|kotlin/String|) -> {
|
||||
Int(3)
|
||||
}
|
||||
}
|
||||
.<Unresolved name: plus>#(Int(0))
|
||||
lval c: R|kotlin/Int| = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.C|) -> {
|
||||
Int(3)
|
||||
}
|
||||
}
|
||||
.R|kotlin/Int.plus|(Int(0))
|
||||
lval d: R|kotlin/Int| = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
else -> {
|
||||
Int(2)
|
||||
}
|
||||
}
|
||||
.R|kotlin/Int.plus|(Int(0))
|
||||
}
|
||||
public final fun test_2(e: R|JavaEnum?|): R|kotlin/Unit| {
|
||||
lval a: <ERROR TYPE REF: Unresolved name: plus> = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.C|) -> {
|
||||
Int(3)
|
||||
}
|
||||
}
|
||||
.<Unresolved name: plus>#(Int(0))
|
||||
lval a: R|kotlin/Int| = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.C|) -> {
|
||||
Int(3)
|
||||
}
|
||||
==($subj$, Null(null)) -> {
|
||||
Int(4)
|
||||
}
|
||||
}
|
||||
.R|kotlin/Int.plus|(Int(0))
|
||||
lval a: R|kotlin/Int| = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(2)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.C|) -> {
|
||||
Int(3)
|
||||
}
|
||||
else -> {
|
||||
Int(4)
|
||||
}
|
||||
}
|
||||
.R|kotlin/Int.plus|(Int(0))
|
||||
}
|
||||
public final fun test_3(e: R|JavaEnum|): R|kotlin/Unit| {
|
||||
lval a: R|kotlin/Int| = when (R|<local>/e|) {
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.A|) || ==($subj$, Q|JavaEnum|.R|/JavaEnum.B|) -> {
|
||||
Int(1)
|
||||
}
|
||||
==($subj$, Q|JavaEnum|.R|/JavaEnum.C|) -> {
|
||||
Int(2)
|
||||
}
|
||||
}
|
||||
.R|kotlin/Int.plus|(Int(0))
|
||||
}
|
||||
Reference in New Issue
Block a user