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:
svtk
2011-12-06 22:41:19 +04:00
parent 6f314c09b0
commit ec55dddfcd
36 changed files with 422 additions and 215 deletions
@@ -1,4 +1,4 @@
class ReadByAnotherPropertyInitializer() {
val a = 1
fun ff() = <!UNRESOLVED_REFERENCE!>$a<!>
fun ff() = $a
}
@@ -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<!>
}
}
}
@@ -1,5 +1,5 @@
abstract class ReadNonexistent {
abstract val aa: Int
fun ff() = <!UNRESOLVED_REFERENCE!>$aa<!>
}
fun ff() = <!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$aa<!>
}
@@ -3,6 +3,6 @@ class ReadNonexistent() {
get() = 1
{
val x = <!NO_BACKING_FIELD!>$a<!>
val x = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
}
}
}
@@ -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<!>
}
@@ -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,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
}
}
}
}