//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 init { valWithBackingField = 2 } val valWithoutBackingField : Int get() = 42 init { valWithoutBackingField = 45 } var finalDefaultVar : Int init { finalDefaultVar = 3 } open var openVar : Int init { openVar = 4 } var varWithCustomSetter : Int set(v: Int) { field = v } init { varWithCustomSetter = 3 } var varWithoutBackingField : Int get() = 3 set(v: Int) {} init { varWithoutBackingField = 4 } abstract var abstractVar : Int init { abstractVar = 34 } } abstract class TestInitializationThroughBackingField() { val valWithBackingField : Int init { $valWithBackingField = 2 } val valWithoutBackingField : Int get() = 42 init { $valWithoutBackingField = 45 } var finalDefaultVar : Int init { $finalDefaultVar = 3 } open var openVar : Int init { $openVar = 4 } var varWithCustomSetter : Int set(v: Int) { field = v } init { $varWithCustomSetter = 3 } var varWithoutBackingField : Int get() = 3 set(v: Int) {} init { $varWithoutBackingField = 4 } abstract var abstractVar : Int init { $abstractVar = 34 } } class TestBackingFieldsVisibility() { var a : Int = 712 init { $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 = $topLevelVar inner class Inner() { val z = this@TestBackingFieldsVisibility.$x } abstract val w = 11 get() = field //test there is no second error here } val topLevelVar = 11 class T() { val z : Int get() = 42 init { this.$z = 34 } fun foo() { this.$z = 343 } val a = object { val x = $z init { $z = 23 } } var x: Int = 2 get() { val o = object { init { field = 34 } fun foo() { field = 23 } } return 1 } var r: Int = $x set(v: Int) { if (true) { field = 33 } else { field = 35 } } fun bar() { $x = 34 val o = object { val y = $x init { $x = 422 } } } }