"field": backing field usage deprecated warning, relevant diagnostics tests changed

This commit is contained in:
Mikhail Glukhikh
2015-09-18 16:13:05 +03:00
parent a1e3471d92
commit c24156ae84
20 changed files with 55 additions and 52 deletions
@@ -557,6 +557,9 @@ public class JetFlowInformationProvider {
DeclarationDescriptor containingDeclaration = variableDescriptor.getContainingDeclaration(); DeclarationDescriptor containingDeclaration = variableDescriptor.getContainingDeclaration();
if ((containingDeclaration instanceof ClassDescriptor) if ((containingDeclaration instanceof ClassDescriptor)
&& DescriptorUtils.isAncestor(containingDeclaration, declarationDescriptor, false)) { && DescriptorUtils.isAncestor(containingDeclaration, declarationDescriptor, false)) {
if (element instanceof JetSimpleNameExpression) {
report(Errors.BACKING_FIELD_USAGE_DEPRECATED.on((JetSimpleNameExpression) element), cxtx);
}
return false; return false;
} }
report(Errors.INACCESSIBLE_BACKING_FIELD.on(element), cxtx); report(Errors.INACCESSIBLE_BACKING_FIELD.on(element), cxtx);
@@ -13,7 +13,7 @@ interface NoC {
class WithC() { class WithC() {
val x : Int val x : Int
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
<!UNRESOLVED_REFERENCE!>$y<!> = 2 <!UNRESOLVED_REFERENCE!>$y<!> = 2
val <!UNUSED_VARIABLE!>b<!> = x val <!UNUSED_VARIABLE!>b<!> = x
+1 -1
View File
@@ -24,7 +24,7 @@ class WithCPI_Dup(<!UNUSED_PARAMETER!>x<!> : Int) {
class WithCPI(x : Int) { class WithCPI(x : Int) {
val a = 1 val a = 1
val b : Int = $a val b : Int = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
val xy : Int = x val xy : Int = x
} }
+1 -1
View File
@@ -7,7 +7,7 @@ open class `$`() {
open class `$$`(`$$$$` : `$$$$$`?) : `$`() { open class `$$`(`$$$$` : `$$$$$`?) : `$`() {
val `$$$` : `$$$$$`? val `$$$` : `$$$$$`?
init { init {
$`$$$` = `$$$$` <!BACKING_FIELD_USAGE_DEPRECATED!>$`$$$`<!> = `$$$$`
} }
open public fun `$$$$$$`() : `$$$$$`? { open public fun `$$$$$$`() : `$$$$$`? {
return `$$$` return `$$$`
+4 -4
View File
@@ -14,16 +14,16 @@ var x : Int = 1 + <!UNINITIALIZED_VARIABLE!>x<!>
class Test() { class Test() {
var a : Int = 111 var a : Int = 111
var b : Int get() = $a; set(x) {a = x; $a = x} var b : Int get() = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>; set(x) {a = x; <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = x}
init { init {
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = $a <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
$a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
} }
fun f() { fun f() {
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = $a <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
} }
public val i = 1 public val i = 1
+1 -1
View File
@@ -134,7 +134,7 @@ fun testBackingFieldsNotMarked() {
val <!UNUSED_VARIABLE!>a<!> = object { val <!UNUSED_VARIABLE!>a<!> = object {
val x : Int val x : Int
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
} }
} }
} }
@@ -1,6 +1,6 @@
class ReadForward() { class ReadForward() {
init { init {
val <!UNUSED_VARIABLE!>x<!> = <!UNINITIALIZED_VARIABLE!>$a<!> val <!UNUSED_VARIABLE!>x<!> = <!BACKING_FIELD_USAGE_DEPRECATED, UNINITIALIZED_VARIABLE!>$a<!>
} }
val a = 1 val a = 1
@@ -1,4 +1,4 @@
class ReadForward() { class ReadForward() {
val a = <!UNINITIALIZED_VARIABLE!>$b<!> val a = <!BACKING_FIELD_USAGE_DEPRECATED, UNINITIALIZED_VARIABLE!>$b<!>
val b = 1 val b = 1
} }
@@ -1,6 +1,6 @@
class ReadByAnotherPropertyInitializer() { class ReadByAnotherPropertyInitializer() {
val a = 1 val a = 1
init { init {
val <!UNUSED_VARIABLE!>x<!> = $a val <!UNUSED_VARIABLE!>x<!> = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
} }
} }
@@ -1,4 +1,4 @@
class ReadByAnotherPropertyInitializer() { class ReadByAnotherPropertyInitializer() {
val a = 1 val a = 1
val b = $a val b = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
} }
@@ -1,4 +1,4 @@
class ReadByAnotherPropertyInitializer() { class ReadByAnotherPropertyInitializer() {
val a = 1 val a = 1
fun ff() = $a fun ff() = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!>
} }
@@ -49,7 +49,7 @@ abstract class TestInitializationWithoutBackingField() {
abstract class TestInitializationThroughBackingField() { abstract class TestInitializationThroughBackingField() {
val valWithBackingField : Int val valWithBackingField : Int
init { init {
$valWithBackingField = 2 <!BACKING_FIELD_USAGE_DEPRECATED!>$valWithBackingField<!> = 2
} }
val valWithoutBackingField : Int val valWithoutBackingField : Int
@@ -60,12 +60,12 @@ abstract class TestInitializationThroughBackingField() {
var finalDefaultVar : Int var finalDefaultVar : Int
init { init {
$finalDefaultVar = 3 <!BACKING_FIELD_USAGE_DEPRECATED!>$finalDefaultVar<!> = 3
} }
open var openVar : Int open var openVar : Int
init { init {
$openVar = 4 <!BACKING_FIELD_USAGE_DEPRECATED!>$openVar<!> = 4
} }
var varWithCustomSetter : Int var varWithCustomSetter : Int
@@ -73,7 +73,7 @@ abstract class TestInitializationThroughBackingField() {
field = v field = v
} }
init { init {
$varWithCustomSetter = 3 <!BACKING_FIELD_USAGE_DEPRECATED!>$varWithCustomSetter<!> = 3
} }
var varWithoutBackingField : Int var varWithoutBackingField : Int
@@ -92,12 +92,12 @@ abstract class TestInitializationThroughBackingField() {
class TestBackingFieldsVisibility() { class TestBackingFieldsVisibility() {
var a : Int = 712 var a : Int = 712
init { init {
$a = 37 <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = 37
this.$a = 357 this.$a = 357
} }
fun foo() { fun foo() {
$a = 334 <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = 334
this.$a = 347 this.$a = 347
} }
@@ -110,7 +110,7 @@ class TestBackingFieldsVisibility() {
val x = <!INACCESSIBLE_BACKING_FIELD!>$topLevelVar<!> val x = <!INACCESSIBLE_BACKING_FIELD!>$topLevelVar<!>
inner class Inner() { inner class Inner() {
val z = this@TestBackingFieldsVisibility.$x val z = this@TestBackingFieldsVisibility.<!BACKING_FIELD_USAGE_DEPRECATED!>$x<!>
} }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val w = 11 <!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val w = 11
@@ -150,7 +150,7 @@ class T() {
return 1 return 1
} }
var r: Int = $x var r: Int = <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!>
set(v: Int) { set(v: Int) {
if (true) { if (true) {
field = 33 field = 33
@@ -161,11 +161,11 @@ class T() {
} }
fun bar() { fun bar() {
$x = 34 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 34
val <!UNUSED_VARIABLE!>o<!> = object { val <!UNUSED_VARIABLE!>o<!> = object {
val y = $x val y = <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!>
init { init {
$x = 422 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 422
} }
} }
} }
@@ -113,16 +113,16 @@ val z = 10
class AnonymousInitializers(var a: String, val b: String) { class AnonymousInitializers(var a: String, val b: String) {
init { init {
$a = "30" <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = "30"
a = "s" a = "s"
<!VAL_REASSIGNMENT!>$b<!> = "3" <!BACKING_FIELD_USAGE_DEPRECATED, VAL_REASSIGNMENT!>$b<!> = "3"
b = "tt" //repeat for b b = "tt" //repeat for b
} }
val i: Int val i: Int
init { init {
$i = 121 <!BACKING_FIELD_USAGE_DEPRECATED!>$i<!> = 121
} }
init { init {
@@ -134,7 +134,7 @@ class AnonymousInitializers(var a: String, val b: String) {
get() = 20 get() = 20
init { init {
<!VAL_REASSIGNMENT!>$i<!> = 13 <!BACKING_FIELD_USAGE_DEPRECATED, VAL_REASSIGNMENT!>$i<!> = 13
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$j<!> = 30 <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$j<!> = 30
<!VAL_REASSIGNMENT!>j<!> = 34 <!VAL_REASSIGNMENT!>j<!> = 34
} }
@@ -145,31 +145,31 @@ class AnonymousInitializers(var a: String, val b: String) {
k = "a" k = "a"
} }
else { else {
$k = "b" <!BACKING_FIELD_USAGE_DEPRECATED!>$k<!> = "b"
} }
} }
val l: String val l: String
init { init {
if (1 < 3) { if (1 < 3) {
$l = "a" <!BACKING_FIELD_USAGE_DEPRECATED!>$l<!> = "a"
} }
else { else {
$l = "b" <!BACKING_FIELD_USAGE_DEPRECATED!>$l<!> = "b"
} }
} }
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val o: String<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val o: String<!>
init { init {
if (1 < 3) { if (1 < 3) {
$o = "a" <!BACKING_FIELD_USAGE_DEPRECATED!>$o<!> = "a"
} }
} }
var m: Int = 30 var m: Int = 30
init { init {
$m = 400 <!BACKING_FIELD_USAGE_DEPRECATED!>$m<!> = 400
} }
val n: Int val n: Int
@@ -177,7 +177,7 @@ class AnonymousInitializers(var a: String, val b: String) {
init { init {
while (<!UNINITIALIZED_VARIABLE!>n<!> == 0) { while (<!UNINITIALIZED_VARIABLE!>n<!> == 0) {
} }
$n = 10 <!BACKING_FIELD_USAGE_DEPRECATED!>$n<!> = 10
while (n == 0) { while (n == 0) {
} }
} }
@@ -198,7 +198,7 @@ class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
val x : Int val x : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
val <!UNUSED_VARIABLE!>b<!> = x val <!UNUSED_VARIABLE!>b<!> = x
} }
val b = a val b = a
@@ -214,7 +214,7 @@ class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
var yy : Int var yy : Int
init { init {
<!VAL_REASSIGNMENT!>w<!> += 1 <!VAL_REASSIGNMENT!>w<!> += 1
$yy = w <!BACKING_FIELD_USAGE_DEPRECATED!>$yy<!> = w
} }
} }
@@ -223,8 +223,8 @@ class Outer() {
var b : Int var b : Int
init { init {
$a = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> = 1
$b = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$b<!> = 1
} }
inner class Inner() { inner class Inner() {
@@ -242,7 +242,7 @@ class Outer() {
class ForwardAccessToBackingField() { //kt-147 class ForwardAccessToBackingField() { //kt-147
val a = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, UNINITIALIZED_VARIABLE!>$a<!> // error val a = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, UNINITIALIZED_VARIABLE!>$a<!> // error
val b = <!UNINITIALIZED_VARIABLE!>$c<!> // error val b = <!BACKING_FIELD_USAGE_DEPRECATED, UNINITIALIZED_VARIABLE!>$c<!> // error
val c = 1 val c = 1
} }
@@ -251,7 +251,7 @@ class ClassObject() {
val x : Int val x : Int
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
} }
@@ -268,8 +268,8 @@ fun foo() {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
val z : Int val z : Int
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
$z = 3 <!BACKING_FIELD_USAGE_DEPRECATED!>$z<!> = 3
} }
fun foo() { fun foo() {
<!VAL_REASSIGNMENT!>y<!> = 10 <!VAL_REASSIGNMENT!>y<!> = 10
@@ -288,7 +288,7 @@ class TestObjectExpression() {
if (true) if (true)
x = 12 x = 12
else else
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
} }
fun inner1() { fun inner1() {
<!VAL_REASSIGNMENT!>y<!> = 101 <!VAL_REASSIGNMENT!>y<!> = 101
@@ -308,7 +308,7 @@ object TestObjectDeclaration {
val x : Int val x : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
init { init {
$x = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$x<!> = 1
} }
fun foo() { fun foo() {
@@ -3,7 +3,7 @@ package h
class Square() { class Square() {
var size : Double = var size : Double =
<!UNRESOLVED_REFERENCE!>set<!>(<!UNRESOLVED_REFERENCE!>value<!>) { <!UNRESOLVED_REFERENCE!>set<!>(<!UNRESOLVED_REFERENCE!>value<!>) {
$area = size * size <!BACKING_FIELD_USAGE_DEPRECATED!>$area<!> = size * size
} }
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var area : Double<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var area : Double<!>
+1 -1
View File
@@ -2,5 +2,5 @@
class WithC() { class WithC() {
val a = 1 val a = 1
val b = $a // error here, but must not be val b = <!BACKING_FIELD_USAGE_DEPRECATED!>$a<!> // error here, but must not be
} }
+2 -2
View File
@@ -12,7 +12,7 @@ class Creature() {
var bbb : Int var bbb : Int
init { init {
$bbb = 1 <!BACKING_FIELD_USAGE_DEPRECATED!>$bbb<!> = 1
} }
} }
@@ -20,7 +20,7 @@ class Creature() {
var ccc : Int var ccc : Int
init { init {
$ccc = 2 <!BACKING_FIELD_USAGE_DEPRECATED!>$ccc<!> = 2
} }
} }
+1 -1
View File
@@ -4,5 +4,5 @@
class A() { class A() {
val c = 1 val c = 1
val a = <!UNINITIALIZED_VARIABLE!>b<!> val a = <!UNINITIALIZED_VARIABLE!>b<!>
val b = $c // '$c' is unresolved val b = <!BACKING_FIELD_USAGE_DEPRECATED!>$c<!> // '$c' is unresolved
} }
+1 -1
View File
@@ -13,7 +13,7 @@ interface NoC {
class WithC() { class WithC() {
val x : Int val x : Int
init { init {
$x = 1 <warning descr="[BACKING_FIELD_USAGE_DEPRECATED] Backing field usage is deprecated here, soon it will be possible only in property accessors">$x</warning> = 1
<error>$y</error> = 2 <error>$y</error> = 2
val <warning>b</warning> = x val <warning>b</warning> = x
+1 -1
View File
@@ -28,7 +28,7 @@ class WithCPI_Dup(<warning>x</warning> : Int) {
class WithCPI(x : Int) { class WithCPI(x : Int) {
val a = 1 val a = 1
val b : Int = $a val b : Int = <warning descr="[BACKING_FIELD_USAGE_DEPRECATED] Backing field usage is deprecated here, soon it will be possible only in property accessors">$a</warning>
val xy : Int = x val xy : Int = x
} }
+1 -1
View File
@@ -2,5 +2,5 @@
class WithC() { class WithC() {
val a = 1 val a = 1
val b = $a // error here, but must not be val b = <warning descr="[BACKING_FIELD_USAGE_DEPRECATED] Backing field usage is deprecated here, soon it will be possible only in property accessors">$a</warning> // error here, but must not be
} }