Files
kotlin/compiler/testData/codegen/box/reflection/classes/sealedSubclasses.kt
2019-11-19 11:00:09 +03:00

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"
}