FIR checker: report PROPERTY_AS_OPERATOR

This commit is contained in:
Tianyu Geng
2021-08-31 16:57:18 -07:00
committed by Mikhail Glukhikh
parent 4915d8dda3
commit 05fbed68e2
21 changed files with 154 additions and 27 deletions
@@ -73,19 +73,44 @@ class Arifm() {
operator fun invoke(i: Int) {}
}
class Contains() {
operator fun invoke(i: Int): Boolean = true
}
class Getter() {
operator fun invoke(i: Int): Int = 1
}
class Setter() {
operator fun invoke(i: Int, j: Int) {}
}
class Unary<B>() {
operator fun invoke(): B = TODO()
}
class B() {
val plus = Arifm()
val minus = Arifm()
val compareTo = Comp()
val contains = Contains()
val get = Getter()
val set = Setter()
val unaryPlus = Unary<B>()
}
fun case3() {
var b = B()
b + 5
b - 5
b < 5
b >= 5
b <!PROPERTY_AS_OPERATOR!>+<!> 5
b <!PROPERTY_AS_OPERATOR!>-<!> 5
b <!PROPERTY_AS_OPERATOR!><<!> 5
b <!PROPERTY_AS_OPERATOR!>>=<!> 5
1 <!PROPERTY_AS_OPERATOR!>in<!> b
<!PROPERTY_AS_OPERATOR!>b[2]<!>
<!PROPERTY_AS_OPERATOR!>b[3]<!> = 4
<!PROPERTY_AS_OPERATOR!>+<!>b
}
// FILE: TestCase4.kt
/*
* TESTCASE NUMBER: 4
@@ -102,8 +127,8 @@ class B(val minusAssign: Assign = Assign()) {
fun case3() {
var b = B()
b += 2
b -= 3
b <!PROPERTY_AS_OPERATOR!>+=<!> 2
b <!PROPERTY_AS_OPERATOR!>-=<!> 3
}
// FILE: TestCase5.kt
@@ -142,7 +167,7 @@ class B(var a: Int = 0) {
val plus :E =TODO()
fun foo(b: B){
this + 1
this <!PROPERTY_AS_OPERATOR!>+<!> 1
}
operator fun invoke(value: Int) = B()
@@ -82,10 +82,30 @@ class Arifm() {
operator fun invoke(i: Int) {}
}
class Contains() {
operator fun invoke(i: Int): Boolean = true
}
class Getter() {
operator fun invoke(i: Int): Int = 1
}
class Setter() {
operator fun invoke(i: Int, j: Int) {}
}
class Unary<B>() {
operator fun invoke(): B = TODO()
}
class B() {
val plus = Arifm()
val minus = Arifm()
val compareTo = Comp()
val contains = Contains()
val get = Getter()
val set = Setter()
val unaryPlus = Unary<B>()
}
fun case3() {
@@ -94,7 +114,12 @@ fun case3() {
b <!PROPERTY_AS_OPERATOR!>-<!> 5
b <!PROPERTY_AS_OPERATOR!><<!> 5
b <!PROPERTY_AS_OPERATOR!>>=<!> 5
1 <!PROPERTY_AS_OPERATOR!>in<!> b
<!PROPERTY_AS_OPERATOR!>b[2]<!>
<!PROPERTY_AS_OPERATOR!>b[3]<!> = 4
<!PROPERTY_AS_OPERATOR!>+<!>b
}
// FILE: TestCase4.kt
/*
* TESTCASE NUMBER: 4
@@ -21,7 +21,7 @@ class B() {
fun case7(){
var b =B()
<!ASSIGN_OPERATOR_AMBIGUITY!>b+=1<!> //ASSIGN_OPERATOR_AMBIGUITY
this += 1 //ASSIGNMENT_OPERATOR_SHOULD_RETURN_UNIT, PROPERTY_AS_OPERATOR
this <!PROPERTY_AS_OPERATOR!>+=<!> 1 //ASSIGNMENT_OPERATOR_SHOULD_RETURN_UNIT, PROPERTY_AS_OPERATOR
}
}
@@ -14,7 +14,7 @@ class Case1() {
fun foo(e: E) {
if (e.plus != null) {
run { e + 1 }
run { e <!PROPERTY_AS_OPERATOR!>+<!> 1 }
/*
[PROPERTY_AS_OPERATOR] (ok)
@@ -22,7 +22,7 @@ class Case1() {
[UNSAFE_OPERATOR_CALL] (nok)
Operator call corresponds to a dot-qualified call 'e.plus(1)' which is not allowed on a nullable receiver 'e'.
*/
e + 1
e <!PROPERTY_AS_OPERATOR!>+<!> 1
e.plus.invoke(1) //ok
}