Fix 'infix call' diagnostic for in operation
#KT-8845 Fixed
This commit is contained in:
@@ -1,31 +1,31 @@
|
||||
class A() {
|
||||
override fun equals(other : Any?) : Boolean = false
|
||||
override fun equals(other : Any?) : Boolean = false
|
||||
}
|
||||
|
||||
fun f(): Unit {
|
||||
var x: Int? = <!VARIABLE_WITH_REDUNDANT_INITIALIZER!>1<!>
|
||||
x = null
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> + 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!INFIX_MODIFIER_REQUIRED!>plus<!> 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!UNSAFE_INFIX_CALL!><<!> 1
|
||||
<!TYPE_MISMATCH!><!DEBUG_INFO_CONSTANT!>x<!> += 1<!>
|
||||
var x: Int? = <!VARIABLE_WITH_REDUNDANT_INITIALIZER!>1<!>
|
||||
x = null
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> + 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!INFIX_MODIFIER_REQUIRED!>plus<!> 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!UNSAFE_OPERATOR_CALL!><<!> 1
|
||||
<!TYPE_MISMATCH!><!DEBUG_INFO_CONSTANT!>x<!> += 1<!>
|
||||
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> == 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> != 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> == 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> != 1
|
||||
|
||||
<!EQUALITY_NOT_APPLICABLE!>A() == 1<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!>A() == 1<!>
|
||||
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> === "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> !== "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> === "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> !== "1"<!>
|
||||
|
||||
<!IMPLICIT_BOXING_IN_IDENTITY_EQUALS!><!DEBUG_INFO_CONSTANT!>x<!> === 1<!>
|
||||
<!IMPLICIT_BOXING_IN_IDENTITY_EQUALS!><!DEBUG_INFO_CONSTANT!>x<!> !== 1<!>
|
||||
<!IMPLICIT_BOXING_IN_IDENTITY_EQUALS!><!DEBUG_INFO_CONSTANT!>x<!> === 1<!>
|
||||
<!IMPLICIT_BOXING_IN_IDENTITY_EQUALS!><!DEBUG_INFO_CONSTANT!>x<!> !== 1<!>
|
||||
|
||||
<!DEBUG_INFO_CONSTANT!>x<!><!UNSAFE_INFIX_CALL!>..<!>2
|
||||
<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!> in 1..2
|
||||
<!DEBUG_INFO_CONSTANT!>x<!><!UNSAFE_OPERATOR_CALL!>..<!>2
|
||||
<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!> in 1..2
|
||||
|
||||
val y : Boolean? = true
|
||||
<!UNUSED_EXPRESSION!>false || <!TYPE_MISMATCH!>y<!><!>
|
||||
<!UNUSED_EXPRESSION!><!TYPE_MISMATCH!>y<!> && true<!>
|
||||
<!UNUSED_EXPRESSION!><!TYPE_MISMATCH!>y<!> && <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!><!>
|
||||
val y : Boolean? = true
|
||||
<!UNUSED_EXPRESSION!>false || <!TYPE_MISMATCH!>y<!><!>
|
||||
<!UNUSED_EXPRESSION!><!TYPE_MISMATCH!>y<!> && true<!>
|
||||
<!UNUSED_EXPRESSION!><!TYPE_MISMATCH!>y<!> && <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!><!>
|
||||
}
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
class A() {
|
||||
operator infix fun plus(<!UNUSED_PARAMETER!>i<!> : Int) {}
|
||||
operator fun unaryMinus() {}
|
||||
operator infix fun contains(<!UNUSED_PARAMETER!>a<!> : Any?) : Boolean = true
|
||||
operator infix fun plus(<!UNUSED_PARAMETER!>i<!> : Int) {}
|
||||
operator fun unaryMinus() {}
|
||||
operator infix fun contains(<!UNUSED_PARAMETER!>a<!> : Any?) : Boolean = true
|
||||
}
|
||||
|
||||
operator infix fun A.div(<!UNUSED_PARAMETER!>i<!> : Int) {}
|
||||
@@ -10,7 +10,7 @@ operator infix fun A?.times(<!UNUSED_PARAMETER!>i<!> : Int) {}
|
||||
fun test(x : Int?, a : A?) {
|
||||
x<!UNSAFE_CALL!>.<!>plus(1)
|
||||
x?.plus(1)
|
||||
x <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
x <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
<!UNSAFE_CALL!>-<!>x
|
||||
x<!UNSAFE_CALL!>.<!>unaryMinus()
|
||||
x?.unaryMinus()
|
||||
@@ -18,13 +18,13 @@ fun test(x : Int?, a : A?) {
|
||||
a<!UNSAFE_CALL!>.<!>plus(1)
|
||||
a?.plus(1)
|
||||
a <!UNSAFE_INFIX_CALL!>plus<!> 1
|
||||
a <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
a <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
<!UNSAFE_CALL!>-<!>a
|
||||
a<!UNSAFE_CALL!>.<!>unaryMinus()
|
||||
a?.unaryMinus()
|
||||
|
||||
a<!UNSAFE_CALL!>.<!>div(1)
|
||||
a <!UNSAFE_INFIX_CALL!>/<!> 1
|
||||
a <!UNSAFE_OPERATOR_CALL!>/<!> 1
|
||||
a <!UNSAFE_INFIX_CALL!>div<!> 1
|
||||
a?.div(1)
|
||||
|
||||
@@ -33,7 +33,7 @@ fun test(x : Int?, a : A?) {
|
||||
a times 1
|
||||
a?.times(1)
|
||||
|
||||
1 <!UNSAFE_INFIX_CALL!>in<!> a
|
||||
1 <!UNSAFE_OPERATOR_CALL!>in<!> a
|
||||
a <!UNSAFE_INFIX_CALL!>contains<!> 1
|
||||
a<!UNSAFE_CALL!>.<!>contains(1)
|
||||
a?.contains(1)
|
||||
|
||||
@@ -7,15 +7,15 @@ fun baz(a: Int, b: Int, c: Int, d: Int) = a + b + c + d
|
||||
|
||||
fun foo() {
|
||||
val x: Int? = 0
|
||||
|
||||
|
||||
bar(if (x != null) x else return, x)
|
||||
x + 2
|
||||
bar(x, x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||
|
||||
|
||||
val y: Int? = 0
|
||||
val z: Int? = 0
|
||||
bar(if (y != null) y else <!TYPE_MISMATCH!>z<!>, <!TYPE_MISMATCH!>y<!>)
|
||||
y <!UNSAFE_INFIX_CALL!>+<!> 2
|
||||
y <!UNSAFE_OPERATOR_CALL!>+<!> 2
|
||||
baz(<!TYPE_MISMATCH!>y<!>, <!TYPE_MISMATCH!>y<!>, if (y == null) return else y, y)
|
||||
baz(y, z!!, z, y)
|
||||
}
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ fun test() {
|
||||
1 + platformJ
|
||||
|
||||
platformNN + 1
|
||||
platformN <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
platformN <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
platformJ + 1
|
||||
|
||||
1 <!INFIX_MODIFIER_REQUIRED!>plus<!> platformNN
|
||||
@@ -49,6 +49,6 @@ fun test() {
|
||||
platformJ <!INFIX_MODIFIER_REQUIRED!>plus<!> 1
|
||||
|
||||
platformNN += 1
|
||||
platformN <!UNSAFE_INFIX_CALL!>+=<!> 1
|
||||
platformN <!UNSAFE_OPERATOR_CALL!>+=<!> 1
|
||||
platformJ += 1
|
||||
}
|
||||
@@ -11,8 +11,8 @@ operator fun Int?.contains(<!UNUSED_PARAMETER!>x<!> : Int) : Boolean = false
|
||||
fun f(): Unit {
|
||||
var set : Set? = null
|
||||
val i : Int? = null
|
||||
i <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
i <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
set + 1
|
||||
1 <!UNSAFE_INFIX_CALL!>in<!> set
|
||||
1 <!UNSAFE_OPERATOR_CALL!>in<!> set
|
||||
1 in 2
|
||||
}
|
||||
|
||||
+2
-2
@@ -22,13 +22,13 @@ fun testDataFlowInfo1(a: Int?, b: Int?) {
|
||||
val c: Int = a ?: b!!
|
||||
doInt(c)
|
||||
// b is nullable if a != null
|
||||
b <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
b <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
}
|
||||
|
||||
fun testDataFlowInfo2(a: Int?, b: Int?) {
|
||||
doInt(a ?: b!!)
|
||||
// b is nullable if a != null
|
||||
b <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
b <!UNSAFE_OPERATOR_CALL!>+<!> 1
|
||||
}
|
||||
|
||||
fun testTypeMismatch(a: String?, b: Any) {
|
||||
|
||||
@@ -15,7 +15,7 @@ fun foo(): Int {
|
||||
k.run()
|
||||
val d: Int = <!DEBUG_INFO_SMARTCAST!>c<!>
|
||||
// a is not null because of k constructor, but we do not know it
|
||||
return a <!UNSAFE_INFIX_CALL!>+<!> d
|
||||
return a <!UNSAFE_OPERATOR_CALL!>+<!> d
|
||||
}
|
||||
else return -1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user