[FIR] Disallow operators not on functions

Introduce `NOT_FUNCTION_AS_OPERATOR` and use it instead of `PROPERTY_AS_OPERATOR`

^KT-65881 Fixed

Merge-request: KT-MR-14547
This commit is contained in:
Ivan Kochurkin
2024-03-08 10:07:23 +00:00
committed by Space Team
parent df9d59851d
commit 2d4f4b9bb5
31 changed files with 440 additions and 100 deletions
@@ -25,7 +25,7 @@ fun case1() {
}
class B() {
val p: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, PROPERTY_AS_OPERATOR!>Delegate()<!> // DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE expected
val p: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NOT_FUNCTION_AS_OPERATOR!>Delegate()<!> // DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE expected
}
class Delegate {
@@ -50,7 +50,7 @@ fun case2() {
}
class B() {
var p: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, PROPERTY_AS_OPERATOR, PROPERTY_AS_OPERATOR!>Delegate()<!> // DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE expected
var p: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NOT_FUNCTION_AS_OPERATOR, NOT_FUNCTION_AS_OPERATOR!>Delegate()<!> // DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE expected
}
class Delegate {
@@ -109,14 +109,14 @@ class B() {
fun case3() {
var b = B()
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
b <!NOT_FUNCTION_AS_OPERATOR!>+<!> 5
b <!NOT_FUNCTION_AS_OPERATOR!>-<!> 5
b <!NOT_FUNCTION_AS_OPERATOR!><<!> 5
b <!NOT_FUNCTION_AS_OPERATOR!>>=<!> 5
1 <!NOT_FUNCTION_AS_OPERATOR!>in<!> b
<!NOT_FUNCTION_AS_OPERATOR!>b[2]<!>
<!NOT_FUNCTION_AS_OPERATOR!>b[3]<!> = 4
<!NOT_FUNCTION_AS_OPERATOR!>+<!>b
}
// FILE: TestCase4.kt
@@ -135,8 +135,8 @@ class B(val minusAssign: Assign = Assign()) {
fun case3() {
var b = B()
b <!PROPERTY_AS_OPERATOR!>+=<!> 2
b <!PROPERTY_AS_OPERATOR!>-=<!> 3
b <!NOT_FUNCTION_AS_OPERATOR!>+=<!> 2
b <!NOT_FUNCTION_AS_OPERATOR!>-=<!> 3
}
// FILE: TestCase5.kt
@@ -175,7 +175,7 @@ class B(var a: Int = 0) {
val plus :E =TODO()
fun foo(b: B){
this <!PROPERTY_AS_OPERATOR!>+<!> 1
this <!NOT_FUNCTION_AS_OPERATOR!>+<!> 1
}
operator fun invoke(value: Int) = B()
@@ -193,7 +193,7 @@ package testPackCase7
fun case7 () {
val iterable: Iterable = Iterable(Inv('s'))
for (i in <!PROPERTY_AS_OPERATOR!>iterable<!>) {
for (i in <!NOT_FUNCTION_AS_OPERATOR!>iterable<!>) {
println(i)
}
}
@@ -226,7 +226,7 @@ package testPackCase8
fun case8 () {
val iterable: Iterable = Iterable()
for (i in <!PROPERTY_AS_OPERATOR!>iterable<!>) {
for (i in <!NOT_FUNCTION_AS_OPERATOR!>iterable<!>) {
println(i)
}
}
@@ -29,7 +29,7 @@ class B() {
fun case7(){
var b =B()
b<!ASSIGN_OPERATOR_AMBIGUITY!>+=<!>1 //ASSIGN_OPERATOR_AMBIGUITY
this <!PROPERTY_AS_OPERATOR!>+=<!> 1 //ASSIGNMENT_OPERATOR_SHOULD_RETURN_UNIT, PROPERTY_AS_OPERATOR
this <!NOT_FUNCTION_AS_OPERATOR!>+=<!> 1 //ASSIGNMENT_OPERATOR_SHOULD_RETURN_UNIT, PROPERTY_AS_OPERATOR
}
}