backing fields resolve changed
KT-462 Consider allowing initializing properties via property names when it is safe KT-598 Allow to use backing fields after this expression
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
class ReadByAnotherPropertyInitializer() {
|
||||
val a = 1
|
||||
fun ff() = <!UNRESOLVED_REFERENCE!>$a<!>
|
||||
fun ff() = $a
|
||||
}
|
||||
|
||||
+2
-2
@@ -2,6 +2,6 @@ abstract class ReadNonexistent() {
|
||||
abstract val aa: Int
|
||||
|
||||
{
|
||||
val x = <!NO_BACKING_FIELD!>$aa<!>
|
||||
val x = <!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$aa<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
abstract class ReadNonexistent {
|
||||
abstract val aa: Int
|
||||
|
||||
fun ff() = <!UNRESOLVED_REFERENCE!>$aa<!>
|
||||
}
|
||||
fun ff() = <!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$aa<!>
|
||||
}
|
||||
+2
-2
@@ -3,6 +3,6 @@ class ReadNonexistent() {
|
||||
get() = 1
|
||||
|
||||
{
|
||||
val x = <!NO_BACKING_FIELD!>$a<!>
|
||||
val x = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -2,5 +2,5 @@ class CustomValNoBackingField() {
|
||||
val a: Int
|
||||
get() = 1
|
||||
|
||||
val b = <!NO_BACKING_FIELD!>$a<!>
|
||||
}
|
||||
val b = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
}
|
||||
+6
-7
@@ -1,7 +1,6 @@
|
||||
val y = 1
|
||||
|
||||
class A() {
|
||||
{
|
||||
val x = <!UNRESOLVED_REFERENCE!>$y<!>
|
||||
}
|
||||
}
|
||||
class CustomValNoBackingField() {
|
||||
val a: Int
|
||||
get() = 1
|
||||
|
||||
val b = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
}
|
||||
+2
-2
@@ -2,6 +2,6 @@ val y = 1
|
||||
|
||||
class A() {
|
||||
{
|
||||
<!UNRESOLVED_REFERENCE!>$y<!> = 1
|
||||
<!INACCESSIBLE_BACKING_FIELD!>$y<!> = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
//KT-462 Consider allowing initializing properties via property names when it is safe
|
||||
//KT-598 Allow to use backing fields after this expression
|
||||
|
||||
namespace kt462
|
||||
|
||||
abstract class TestInitializationWithoutBackingField() {
|
||||
val valWithBackingField : Int
|
||||
{
|
||||
valWithBackingField = 2
|
||||
}
|
||||
|
||||
val valWithoutBackingField : Int
|
||||
get() = 42
|
||||
{
|
||||
<!VAL_REASSIGNMENT!>valWithoutBackingField<!> = 45
|
||||
}
|
||||
|
||||
var finalDefaultVar : Int
|
||||
{
|
||||
finalDefaultVar = 3
|
||||
}
|
||||
|
||||
open var openVar : Int
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER!>openVar<!> = 4
|
||||
}
|
||||
|
||||
var varWithCustomSetter : Int
|
||||
set(v: Int) {
|
||||
$varWithCustomSetter = v
|
||||
}
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER!>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
|
||||
{
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$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) {}
|
||||
{
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$varWithoutBackingField<!> = 4
|
||||
}
|
||||
|
||||
abstract var abstractVar : Int
|
||||
{
|
||||
<!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$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 <!UNUSED_VARIABLE!>b<!> : Int = 3
|
||||
<!UNRESOLVED_REFERENCE!>$b<!> = 342
|
||||
<!INACCESSIBLE_BACKING_FIELD!>a.$a<!> = 3
|
||||
}
|
||||
|
||||
val x = <!INACCESSIBLE_BACKING_FIELD!>$namespaceLevelVar<!>
|
||||
|
||||
class Inner() {
|
||||
val z = this@TestBackingFieldsVisibility.$x
|
||||
}
|
||||
|
||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val w = 11
|
||||
get() = $w //test there is no second error here
|
||||
}
|
||||
|
||||
val namespaceLevelVar = 11
|
||||
|
||||
class T() {
|
||||
val z : Int get() = 42
|
||||
|
||||
{
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>this.$z<!> = 34
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>this.$z<!> = 343
|
||||
}
|
||||
|
||||
val a = object {
|
||||
val x = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS, NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$z<!>
|
||||
{
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS, NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$z<!> = 23
|
||||
}
|
||||
}
|
||||
|
||||
var x: Int = 2
|
||||
get() {
|
||||
val <!UNUSED_VARIABLE!>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 <!UNUSED_VARIABLE!>o<!> = object {
|
||||
val y = $x
|
||||
{
|
||||
$x = 422
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user