Files
kotlin-fork/backend.native/tests/objcexport/kt35940.kt
T
Igor Chevdar c75af5cf5d [devirtualization] Removed redundant code with associated objects + test
It turned out that it is not needed to explicitly add all associated objects to instantiating classes
since their constructors have been already added to the root set and all constructors have additional
parameter (<this>) and its type will be added to instantiating classes since it is final for all objects
2020-04-14 20:11:53 +03:00

45 lines
878 B
Kotlin

/*
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
package kt35940
import kotlin.reflect.*
@OptIn(ExperimentalAssociatedObjects::class)
@AssociatedObjectKey
@Retention(AnnotationRetention.BINARY)
annotation class Associated(val kClass: KClass<*>)
private interface I1 {
val s: String
}
private class I1Impl : I1 {
override val s = "zzz"
}
private class C(var i1: I1?)
private interface I2 {
fun bar(c: C)
}
private object I2Impl : I2 {
override fun bar(c: C) {
c.i1 = I1Impl()
}
}
@Associated(I2Impl::class)
private class I2ImplHolder
@OptIn(ExperimentalAssociatedObjects::class)
fun testKt35940(): String {
val i2 = I2ImplHolder::class.findAssociatedObject<Associated>()!! as I2
val c = C(null)
i2.bar(c)
return c.i1!!.s
}