//KT-462 Consider allowing initializing properties via property names when it is safe //KT-598 Allow to use backing fields after this expression package kt462 abstract class TestInitializationWithoutBackingField() { val valWithBackingField : Int { valWithBackingField = 2 } val valWithoutBackingField : Int get() = 42 { valWithoutBackingField = 45 } var finalDefaultVar : Int { finalDefaultVar = 3 } open var openVar : Int { openVar = 4 } var varWithCustomSetter : Int set(v: Int) { $varWithCustomSetter = v } { varWithCustomSetter = 3 } var varWithoutBackingField : Int get() = 3 set(v: Int) {} { varWithoutBackingField = 4 } abstract var abstractVar : Int { abstractVar = 34 } } abstract class TestInitializationThroughBackingField() { val valWithBackingField : Int { $valWithBackingField = 2 } val valWithoutBackingField : Int get() = 42 { $valWithoutBackingField = 45 } var finalDefaultVar : Int { $finalDefaultVar = 3 } open var openVar : Int { $openVar = 4 } var varWithCustomSetter : Int set(v: Int) { $varWithCustomSetter = v } { $varWithCustomSetter = 3 } var varWithoutBackingField : Int get() = 3 set(v: Int) {} { $varWithoutBackingField = 4 } abstract var abstractVar : Int { $abstractVar = 34 } } class TestBackingFieldsVisibility() { var a : Int = 712 { $a = 37 this.$a = 357 } fun foo() { $a = 334 this.$a = 347 } fun foo(a: TestBackingFieldsVisibility) { val b : Int = 3 $b = 342 a.$a = 3 } val x = $namespaceLevelVar class Inner() { val z = this@TestBackingFieldsVisibility.$x } abstract val w = 11 get() = $w //test there is no second error here } val namespaceLevelVar = 11 class T() { val z : Int get() = 42 { this.$z = 34 } fun foo() { this.$z = 343 } val a = object { val x = $z { $z = 23 } } var x: Int = 2 get() { val o = object { { $x = 34 } fun foo() { $x = 23 } } return 1 } var r: Int = $x set(v: Int) { if (true) { $r = 33 } else { $r = 35 } } fun bar() { $x = 34 val o = object { val y = $x { $x = 422 } } } }