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:
@@ -24,7 +24,7 @@ class WithC() {
|
||||
{
|
||||
val z = <!UNRESOLVED_REFERENCE!>b<!>
|
||||
val zz = x
|
||||
val zzz = <!NO_BACKING_FIELD!>$a<!>
|
||||
val zzz = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
}
|
||||
|
||||
this(a : Int) : this() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var x : Int = 1 + x
|
||||
var x : Int = 1 + x
|
||||
get() : Int = 1
|
||||
set(<!REF_SETTER_PARAMETER!>ref<!> value : <!WRONG_SETTER_PARAMETER_TYPE!>Long<!>) {
|
||||
$x = value.int
|
||||
@@ -14,16 +14,16 @@
|
||||
|
||||
class Test() {
|
||||
var a : Int = 111
|
||||
var b : Int get() = <!UNRESOLVED_REFERENCE!>$a<!>; set(x) {a = x; <!UNRESOLVED_REFERENCE!>$a<!> = x}
|
||||
var b : Int get() = $a; set(x) {a = x; $a = x}
|
||||
|
||||
this(i : Int) : this() {
|
||||
<!NO_BACKING_FIELD!>$b<!> = $a
|
||||
$a = <!NO_BACKING_FIELD!>$b<!>
|
||||
a = <!NO_BACKING_FIELD!>$b<!>
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = $a
|
||||
$a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
|
||||
a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
|
||||
}
|
||||
fun f() {
|
||||
<!UNRESOLVED_REFERENCE!>$b<!> = <!UNRESOLVED_REFERENCE!>$a<!>
|
||||
a = <!UNRESOLVED_REFERENCE!>$b<!>
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = $a
|
||||
a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
|
||||
}
|
||||
public val <!PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE!>i<!> = 1
|
||||
}
|
||||
@@ -137,14 +137,14 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
|
||||
{
|
||||
<!VAL_REASSIGNMENT!>$i<!> = 13
|
||||
<!NO_BACKING_FIELD, VAL_REASSIGNMENT!>$j<!> = 30
|
||||
j = 34
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$j<!> = 30
|
||||
<!VAL_REASSIGNMENT!>j<!> = 34
|
||||
}
|
||||
|
||||
val k: String
|
||||
{
|
||||
if (1 < 3) {
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>k<!> = "a"
|
||||
k = "a"
|
||||
}
|
||||
else {
|
||||
$k = "b"
|
||||
@@ -288,7 +288,7 @@ class TestObjectExpression() {
|
||||
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>y<!> : Int
|
||||
{
|
||||
if (true)
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>x<!> = 12
|
||||
x = 12
|
||||
else
|
||||
$x = 1
|
||||
}
|
||||
@@ -349,4 +349,4 @@ fun test(m : M) {
|
||||
fun test1(m : M) {
|
||||
<!VAL_REASSIGNMENT!>m.x<!>++
|
||||
m.y--
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ namespace kt510
|
||||
public open class Identifier1() {
|
||||
var field : Boolean
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>field<!> = false; // error
|
||||
field = false; // error
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,6 @@ public open class Identifier1() {
|
||||
public open class Identifier2() {
|
||||
var field : Boolean
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>this.field<!> = false;
|
||||
this.field = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user