// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -NOTHING_TO_INLINE // FILE: test.kt lateinit var topLevel: String interface Base { var x: String } open class Foo : Base { override lateinit var x: String private lateinit var y: String var nonLateInit: Int = 1 fun ok() { ::topLevel.isInitialized val b: Boolean = this::x.isInitialized val otherInstance = Foo() otherInstance::x.isInitialized (this::x).isInitialized (@Suppress("ALL") (this::x)).isInitialized object { fun local() { class Local { val xx = this@Foo::x.isInitialized val yy = this@Foo::y.isInitialized } } } } fun onLiteral() { val p = this::x p.isInitialized } fun onNonLateinit() { this::nonLateInit.isInitialized } inline fun inlineFun() { this::x.isInitialized object { val z = this@Foo::x.isInitialized } } inner class InnerSubclass : Foo() { fun innerOk() { // This is access to Foo.x declared lexically above this@Foo::x.isInitialized // This is access to InnerSubclass.x which is inherited from Foo.x this::x.isInitialized } } } fun onNonAccessible() { Foo()::x.isInitialized } fun onNonLateinit() { Foo()::nonLateInit.isInitialized } object Unrelated { fun onNonAccessible() { Foo()::x.isInitialized } } class FooImpl : Foo() { fun onNonAccessible() { this::x.isInitialized } } // FILE: other.kt class OtherFooImpl : Foo() { fun onNonAccessible() { this::x.isInitialized ::topLevel.isInitialized } }