[JVM] Lower .entries calls on Kotlin enums
Leveraging the same mechanism with $EntriesMapping as Java enums. Old (compiled with LV/AV < 1.8) enums are detected by looking for static special <get-entries> method that cannot be introduced on Kotlin enums otherwise #KT-53236
This commit is contained in:
committed by
Space
parent
a12a31ce68
commit
e3bff290bd
@@ -13,5 +13,6 @@ enum MyEnum {
|
||||
fun box(): String {
|
||||
val entries = MyEnum.entries
|
||||
val entry = entries[0]
|
||||
require(java.util.concurrent.TimeUnit.entries.size == java.util.concurrent.TimeUnit.values().size)
|
||||
return entry.toString()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// FULL_JDK
|
||||
// WITH_STDLIB
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: MyEnum.kt
|
||||
enum class MyEnum {
|
||||
Nope, OK
|
||||
}
|
||||
|
||||
// MODULE: caller(lib)
|
||||
// !LANGUAGE: +EnumEntries
|
||||
// FILE: Box.kt
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun box(): String {
|
||||
return MyEnum.entries[1].toString()
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// FULL_JDK
|
||||
// WITH_STDLIB
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: MyEnums.kt
|
||||
enum class MyEnum {
|
||||
N, O
|
||||
}
|
||||
|
||||
enum class MyEnum2 {
|
||||
O, K
|
||||
}
|
||||
|
||||
// MODULE: caller(lib)
|
||||
// !LANGUAGE: +EnumEntries
|
||||
// FILE: Box.kt
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun box(): String {
|
||||
return MyEnum.entries[1].toString() + MyEnum2.entries[1].toString()
|
||||
}
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// FULL_JDK
|
||||
// WITH_STDLIB
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: MyEnums.kt
|
||||
enum class MyEnum {
|
||||
N, O
|
||||
}
|
||||
|
||||
enum class MyEnum2 {
|
||||
O, K
|
||||
}
|
||||
|
||||
// MODULE: caller(lib)
|
||||
// !LANGUAGE: +EnumEntries
|
||||
// FILE: Box.kt
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
object Container {
|
||||
fun getK() = MyEnum2.entries[1].toString()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun box(): String {
|
||||
return MyEnum.entries[1].toString() + Container.getK()
|
||||
}
|
||||
Reference in New Issue
Block a user