FIR: fix position and reporting of PRIVATE_SETTER_*

Previously `FirPropertyAccessor.source` references the `KtProperty` if
the user code contains a setter or getter that doesn't contain a body.
For example, with the following

```
val i: Int = 1
  private set
```

The `FirPropertyAccessor` would reference the `KtProperty` as the
source.

This change makes `FirPropertyAccessor` reference `KtPropertyAccessor`
as the source if possible, regardless of whether the body is present or
not.
This commit is contained in:
Tianyu Geng
2021-02-18 16:28:27 -08:00
committed by Mikhail Glukhikh
parent bdeecfc188
commit 5bdea9652b
14 changed files with 56 additions and 55 deletions
@@ -1,14 +1,14 @@
abstract class My {
abstract var x: Int
public get
private set
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract val y: Int
protected get
abstract protected var z: Int
internal get
private set
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract internal val w: Int
protected get
@@ -17,5 +17,5 @@ abstract class My {
protected set
open var t: Int = 0
private set
}
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
}
@@ -9,8 +9,8 @@ abstract class MyAbstractClass() {
var b: Int private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
@@ -42,4 +42,4 @@ abstract class MyAbstractClass() {
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
}
+5 -5
View File
@@ -7,10 +7,10 @@ interface MyTrait {
abstract val a2: Int
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; private set
abstract var b2: Int private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
var b: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; <!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
<!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 }
@@ -42,4 +42,4 @@ interface MyTrait {
var l1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
<!BACKING_FIELD_IN_INTERFACE!>var n: Int<!> abstract get abstract set(v: Int) {}
}
}
@@ -31,40 +31,40 @@ class B : A, AA() {
open class C : A, AA() {
override var a: Int = 0
// Errors here and below
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var b: Int = 1
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var c: Int = 2
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var d: Int = 3
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
}
abstract class D : A, AA() {
override var a: Int = 0
// Errors here and below
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var b: Int = 1
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var c: Int = 2
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
override var d: Int = 3
private set
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
}
interface E : A {
override var a: Int
get() = 0
// Errors here and below
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private set(arg) {}<!>
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set(arg) {}
override var b: Int
get() = 0
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private set(arg) {}<!>
}
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set(arg) {}
}
@@ -11,8 +11,8 @@ enum class MyEnum() {
var b: Int private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
@@ -44,4 +44,4 @@ enum class MyEnum() {
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
}
@@ -5,11 +5,11 @@ interface Test<in I, out O> {
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> val private_val: I
var interlan_private_set: O
private set
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
public var public_private_set: O
private set
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
protected var protected_private_set: O
private set
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> var private_private_set: O
private set
@@ -17,4 +17,4 @@ interface Test<in I, out O> {
public fun public_fun(i: O) : I
protected fun protected_fun(i: O) : I
<!PRIVATE_FUNCTION_WITH_NO_BODY!>private<!> fun private_fun(i: O) : I
}
}