FIR checker: add diagnostics for backing fields

This commit is contained in:
Jinseong Jeon
2021-02-02 13:25:59 -08:00
committed by Mikhail Glukhikh
parent a88b82d8ff
commit bd37badf29
27 changed files with 89 additions and 84 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ package MyPackage
abstract var c3: Int = 0; set(v: Int) { field = v }
val e: Int get() = a
val e1: Int = 0; get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
abstract val e2: Int get() = a
abstract val e3: Int = 0; get() = a
@@ -18,7 +18,7 @@ abstract class MyAbstractClass() {
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
val e: Int get() = a
val e1: Int = 0; get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
+1 -1
View File
@@ -18,7 +18,7 @@ class MyClass() {
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c3: Int = 0; set(v: Int) { field = v }
val e: Int get() = a
val e1: Int = 0; get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e2: Int get() = a
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e3: Int = 0; get() = a
+5 -5
View File
@@ -12,8 +12,8 @@ interface MyTrait {
abstract var b2: Int private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
var c: Int set(v: Int) { field = v }
var c1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; set(v: Int) { field = v }
<!BACKING_FIELD_IN_INTERFACE!>var c: Int<!> set(v: Int) { field = v }
<!BACKING_FIELD_IN_INTERFACE!>var c1: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; set(v: Int) { field = v }
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
@@ -32,8 +32,8 @@ interface MyTrait {
var i: Int abstract get abstract set
var i1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
var j: Int get() = i; abstract set
var j1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
<!BACKING_FIELD_IN_INTERFACE!>var j: Int<!> get() = i; abstract set
<!BACKING_FIELD_IN_INTERFACE!>var j1: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
var k: Int abstract set
var k1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract set
@@ -41,5 +41,5 @@ interface MyTrait {
var l: Int abstract get abstract set
var l1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
<!BACKING_FIELD_IN_INTERFACE!>var n: Int<!> abstract get abstract set(v: Int) {}
}
+1 -1
View File
@@ -29,7 +29,7 @@ class WithCPI(x : Int) {
class NoCPI {
val a = 1
var ab = 1
var ab = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>1<!>
get() = 1
set(v) {}
}
+2 -2
View File
@@ -5,11 +5,11 @@ var x : Int = 1 + x
field = 1.toLong()
}
val xx : Int = 1 + x
val xx : Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>1 + x<!>
get() : Int = 1
set(value : Long) {}
val p : Int = 1
val p : Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>1<!>
get() = 1
class Test() {
@@ -1,17 +0,0 @@
// See KT-9303: synthetic field variable does not exist for extension properties
val String.foo: Int
get() {
// No shadowing here
val field = 42
return field
}
val String.bar: Int = 13
// Error
get() = <!UNRESOLVED_REFERENCE!>field<!>
class My {
val String.x: Int = 7
// Error
get() = <!UNRESOLVED_REFERENCE!>field<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See KT-9303: synthetic field variable does not exist for extension properties
val String.foo: Int
get() {
@@ -1,4 +0,0 @@
interface My {
val x: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>
get() = field
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface My {
<!BACKING_FIELD_IN_INTERFACE!>val x: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>
get() = field
@@ -20,7 +20,7 @@ enum class MyEnum() {
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
val e: Int get() = a
val e1: Int = 0; get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
@@ -13,5 +13,5 @@ const val intArrayConst: IntArray = intArrayOf()
const val unresolvedConst1 = <!UNRESOLVED_REFERENCE!>Unresolved<!>
const var unresolvedConst2 = <!UNRESOLVED_REFERENCE!>Unresolved<!>
const val unresolvedConst3 = <!UNRESOLVED_REFERENCE!>Unresolved<!>
const val unresolvedConst3 = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD, UNRESOLVED_REFERENCE!>Unresolved<!>
get() = 10
@@ -2,11 +2,11 @@
package i
val <T> List<T>.length = <!UNRESOLVED_REFERENCE!>size<!>
val <T> List<T>.length = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD, UNRESOLVED_REFERENCE!>size<!>
val <T> List<T>.length1 : Int get() = size
val String.bd = <!NO_THIS!>this<!> + "!"
val String.bd = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!NO_THIS!>this<!> + "!"<!>
val String.bd1 : String get() = this + "!"
@@ -15,7 +15,7 @@ class A {
val ii : Int = 1
}
val A.foo = <!UNRESOLVED_REFERENCE!>ii<!>
val A.foo = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD, UNRESOLVED_REFERENCE!>ii<!>
val A.foo1 : Int get() = ii
@@ -24,8 +24,8 @@ class C {
inner class D {}
}
val C.foo : C.D = <!UNRESOLVED_REFERENCE!>D<!>()
val C.foo : C.D = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!UNRESOLVED_REFERENCE!>D<!>()<!>
val C.bar : C.D = C().D()
val C.bar : C.D = C().<!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>D()<!>
val C.foo1 : C.D get() = D()
@@ -1,7 +1,7 @@
interface Base {
fun foo()
}
val String.test: Base = object: Base {
val String.test: Base = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>object: Base<!> {
override fun foo() {
<!UNRESOLVED_LABEL!>this@test<!>
}