mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-10 08:31:29 +00:00
42 lines
1.2 KiB
Kotlin
Vendored
42 lines
1.2 KiB
Kotlin
Vendored
// IGNORE_BACKEND_FIR: JVM_IR
|
|
// TARGET_BACKEND: JVM
|
|
// WITH_REFLECT
|
|
|
|
import kotlin.reflect.KClass
|
|
import kotlin.test.assertEquals
|
|
|
|
// --
|
|
|
|
sealed class SealedClassWithTopLevelSubclasses {
|
|
class NotASealedSubclass : TL2()
|
|
}
|
|
object TL1 : SealedClassWithTopLevelSubclasses()
|
|
open class TL2 : SealedClassWithTopLevelSubclasses()
|
|
|
|
// --
|
|
|
|
sealed class SealedClassWithNestedSubclasses {
|
|
data class N1(val x: Unit) : SealedClassWithNestedSubclasses()
|
|
object N2 : SealedClassWithNestedSubclasses()
|
|
}
|
|
|
|
// --
|
|
|
|
sealed class SealedClassWithNoSubclasses
|
|
|
|
// --
|
|
|
|
fun sealedSubclassNames(c: KClass<*>) = c.sealedSubclasses.map { it.simpleName ?: throw AssertionError("Unnamed class: ${it.java}") }.sorted()
|
|
|
|
fun box(): String {
|
|
assertEquals(listOf("TL1", "TL2"), sealedSubclassNames(SealedClassWithTopLevelSubclasses::class))
|
|
assertEquals(listOf("N1", "N2"), sealedSubclassNames(SealedClassWithNestedSubclasses::class))
|
|
assertEquals(emptyList(), sealedSubclassNames(SealedClassWithNoSubclasses::class))
|
|
|
|
assertEquals(emptyList(), sealedSubclassNames(String::class))
|
|
assertEquals(emptyList(), sealedSubclassNames(Thread::class))
|
|
assertEquals(emptyList(), sealedSubclassNames(FloatArray::class))
|
|
|
|
return "OK"
|
|
}
|