// SKIP_TXT fun objectInit() { var x: String? var y: String? x = "" y = "" x.length // ok y.length // ok val o = object { init { x.length } // ? init { x = null } init { x.length } // bad init { y.length } // ok fun foo() = x.length // bad } y = null x.length // bad if (x != null) x.length // ok } fun objectMethod() { var x: String? x = "" x.length // ok val o = object { init { x.length } // sort of bad fun foo() = x.length // bad fun bar() { x = null } fun baz() = x.length // bad } x.length // bad if (x != null) { o.bar() // assign here x.length // bad } } fun classInit() { var x: String? var y: String? x = "" y = "" x.length // ok y.length // ok val ctor = run { class C { init { x.length } // ? init { x = null } init { x.length } // bad init { y.length } // bad fun foo() = x.length // bad } x.length // bad if (x != null) { y = null C() // read y & assign x here x.length // bad } ::C } x.length // bad if (x != null) { ctor() // read y & assign x here x.length // bad } } fun classMethod() { var x: String? var y: String? x = "" y = "" x.length // ok y.length // ok val ctor = run { class C { init { x.length } // sort of bad init { y.length } // bad fun foo() = x.length // bad fun bar() { x = null } fun baz() = x.length // bad } x.length // bad if (x != null) { C().bar() // assign here x.length // bad } ::C } x.length // bad if (x != null) { y = null ctor().bar() // read y & assign x here x.length // bad } } fun runInInverseOrder(x: Any?, a: () -> Unit, b: () -> Unit) { b() a() } fun objectInParallelLambda() { var x: String? x = "" runInInverseOrder( object { init { x.length } }, // ok { object { init { x.length } } }, // bad { x = null }, ) x.length // bad }