FIR: Choose a resolved candidate for augmented assignment when both

assign and operator candidates are unsuccessful.
This commit is contained in:
Mark Punzalan
2021-05-25 23:10:15 +00:00
committed by teamcityserver
parent 32bb64a225
commit d1531f9cdd
9 changed files with 34 additions and 44 deletions
@@ -8,7 +8,7 @@ fun f(): Unit {
x <!UNSAFE_OPERATOR_CALL!>+<!> 1
x <!UNSAFE_INFIX_CALL!>plus<!> 1
x <!UNSAFE_OPERATOR_CALL!><<!> 1
x <!UNRESOLVED_REFERENCE!>+=<!> 1
x <!UNSAFE_OPERATOR_CALL!>+=<!> 1
x == 1
x != 1
@@ -1,17 +0,0 @@
class A {
operator fun plusAssign(s: String) {}
}
fun test() {
var a: A? = A()
a <!UNSAFE_OPERATOR_CALL!>+=<!> ""
}
class B {
operator fun plus(other: B) = this
}
fun test2() {
var b: B? = B()
b <!UNRESOLVED_REFERENCE!>+=<!> B()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
class A {
operator fun plusAssign(s: String) {}
}
@@ -1,14 +1,14 @@
fun intBinEq() {
var x = 0
x <!UNRESOLVED_REFERENCE!>+=<!> 'a'
x <!NONE_APPLICABLE!>+=<!> 'a'
x += 1.toByte()
x += 1.toShort()
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1.0<!>
x <!UNRESOLVED_REFERENCE!>*=<!> 'a'
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toByte()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toShort()<!>
x <!NONE_APPLICABLE!>*=<!> 'a'
x *= 1.toByte()
x *= 1.toShort()
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.0<!>
@@ -16,16 +16,16 @@ fun intBinEq() {
fun shortBinEq() {
var x = 0.toShort()
x <!UNRESOLVED_REFERENCE!>+=<!> 'a'
x <!NONE_APPLICABLE!>+=<!> 'a'
x += 1.toByte()
x += 1.toShort()
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1.0<!>
x <!UNRESOLVED_REFERENCE!>*=<!> 'a'
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toByte()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toShort()<!>
x <!NONE_APPLICABLE!>*=<!> 'a'
x *= 1.toByte()
x *= 1.toShort()
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.0<!>
@@ -7,7 +7,7 @@ fun foo(): String {
var t: String? = "y"
if (t == null) t = "x"
var x: Int? = null
if (x == null) x <!UNRESOLVED_REFERENCE!>+=<!> null
if (x == null) x <!UNSAFE_OPERATOR_CALL!>+=<!> null
return t + s
}