FIR checker: introduce member property checker

This commit is contained in:
Jinseong Jeon
2020-12-03 15:27:32 -08:00
committed by Mikhail Glukhikh
parent 2bf22caeb7
commit 5167d69b7c
20 changed files with 203 additions and 52 deletions
@@ -5,22 +5,22 @@ abstract class MyAbstractClass() {
val a: Int
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = 1
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = 0; private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 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 }<!>
val e: Int get() = a
val e1: Int = 0; get() = a
abstract val e2: Int get() = a
abstract val e3: Int = 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<!>
//methods
fun f()
+8 -8
View File
@@ -4,23 +4,23 @@ class MyClass() {
//properties
val a: Int
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = 1
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a2: Int
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a3: Int = 1
var b: Int private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = 0; private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b2: Int private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b3: Int = 0; private set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 0; set(v: Int) { field = v }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c2: Int set(v: Int) { field = v }
<!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
abstract val e2: Int get() = a
abstract val e3: Int = 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
//methods
fun f()
+14 -14
View File
@@ -3,24 +3,24 @@ package abstract
interface MyTrait {
//properties
val a: Int
val a1: Int = 1
val a1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>1<!>
abstract val a2: Int
abstract val a3: Int = 1
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
var b1: Int = 0; private set
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; private set
abstract var b2: Int private set
abstract var b3: Int = 0; private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 0; set(v: Int) { field = v }
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 }<!>
val e: Int get() = a
val e1: Int = 0; get() = a
abstract val e2: Int get() = a
abstract val e3: Int = 0; get() = a
val e1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>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<!>
//methods
fun f()
@@ -30,16 +30,16 @@ interface MyTrait {
//property accessors
var i: Int abstract get abstract set
var i1: Int = 0; 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 = 0; get() = i; abstract set
var j1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
var k: Int abstract set
var k1: Int = 0; abstract set
var k1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract set
var l: Int abstract get abstract set
var l1: Int = 0; 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) {}
}
+1 -1
View File
@@ -1,5 +1,5 @@
// NI_EXPECTED_FILE
interface T {
val a = <!UNRESOLVED_REFERENCE!>Foo<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
val a = <!UNRESOLVED_REFERENCE!>Foo<!>.<!PROPERTY_INITIALIZER_IN_INTERFACE!><!UNRESOLVED_REFERENCE!>bar<!>()<!>
}
@@ -62,9 +62,9 @@ interface E : A {
override var a: Int
get() = 0
// Errors here and below
private set(arg) {}
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private set(arg) {}<!>
override var b: Int
get() = 0
private set(arg) {}
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private set(arg) {}<!>
}
@@ -1,4 +1,4 @@
interface My {
val x: Int = 0
val x: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>
get() = field
}
@@ -9,7 +9,7 @@ interface T {
final val c : Int
get() = 42
final val d = 1
final val d = <!PROPERTY_INITIALIZER_IN_INTERFACE!>1<!>
}
class A {
@@ -3,7 +3,7 @@
import kotlin.reflect.KProperty
abstract class A {
abstract val a: Int by Delegate()
abstract val a: Int by <!ABSTRACT_DELEGATED_PROPERTY!>Delegate()<!>
}
class Delegate {
@@ -7,22 +7,22 @@ enum class MyEnum() {
val a: Int
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = 1
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = 0; private set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
var c: Int set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 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 }<!>
val e: Int get() = a
val e1: Int = 0; get() = a
abstract val e2: Int get() = a
abstract val e3: Int = 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<!>
//methods
fun f()
@@ -1,7 +1,7 @@
abstract class Test() {
abstract val x : Int
abstract val x1 : Int get
abstract val x2 : Int get() = 1
abstract val x2 : Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
val a : Int
val b : Int get
@@ -22,9 +22,9 @@ abstract class Test() {
abstract var y1 : Int get
abstract var y2 : Int set
abstract var y3 : Int set get
abstract var y4 : Int set get() = 1
abstract var y5 : Int set(x) {} get() = 1
abstract var y6 : Int set(x) {}
abstract var y4 : Int set <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
abstract var y5 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!> <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
abstract var y6 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!>
var v : Int
var v1 : Int get
@@ -17,7 +17,7 @@ class B(const val constructor: Int = 5)
abstract class C {
<!INCOMPATIBLE_MODIFIERS!>open<!> <!INCOMPATIBLE_MODIFIERS!>const<!> val x: Int = 6
<!INCOMPATIBLE_MODIFIERS!>abstract<!> <!INCOMPATIBLE_MODIFIERS!>const<!> val y: Int = 7
<!INCOMPATIBLE_MODIFIERS!>abstract<!> <!INCOMPATIBLE_MODIFIERS!>const<!> val y: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>7<!>
companion object {
const val inCompaionObject = 8
@@ -1,5 +1,5 @@
interface My {
private val x: Int
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> val x: Int
<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> val xx: Int
private val xxx: Int
get() = 0
@@ -9,7 +9,7 @@ interface Foo {
expect class NonAbstractClass : Foo {
abstract fun bar()
abstract val baz: Int
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val baz: Int
abstract override fun foo()
}
@@ -2,7 +2,7 @@ interface Test<in I, out O> {
val internal_val: I
public val public_val: I
protected val protected_val: I
private val private_val: I
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> val private_val: I
var interlan_private_set: O
private set
@@ -10,7 +10,7 @@ interface Test<in I, out O> {
private set
protected var protected_private_set: O
private set
private var private_private_set: O
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> var private_private_set: O
private set
fun internal_fun(i: O) : I