[FIR] Fix type constraint for type parameter ^KT-45345 Fixed

This commit is contained in:
Ivan Kochurkin
2021-10-06 21:48:56 +03:00
parent a0fb60f201
commit 2e1f455d9c
9 changed files with 69 additions and 30 deletions
@@ -22,7 +22,7 @@ class Case1<AT>(val x: AT) {
when (k) {
is AT -> {
k checkType { <!NONE_APPLICABLE!>check<!><AT>() }
k checkType { check<AT>() }
}
}
}
@@ -31,7 +31,7 @@ class Case1<AT>(val x: AT) {
val k: AT = x!!
if (k is AT) {
k checkType { <!NONE_APPLICABLE!>check<!><AT>() }
k checkType { check<AT>() }
}
}
}
@@ -8,8 +8,8 @@
*/
inline fun <reified T, reified K> case_1(x: T) {
if (x is K) {
<!DEBUG_INFO_EXPRESSION_TYPE("T & K!! & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & K!! & T!!")!>x<!>.equals(x)
<!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T & K & T")!>x<!><!UNSAFE_CALL!>.<!>equals(x)
}
}
@@ -31,8 +31,8 @@ inline fun <reified T, reified K> case_3() {
var x: T? = 10 as T
x = null
if (x is K) {
<!DEBUG_INFO_EXPRESSION_TYPE("T? & kotlin.Nothing")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("T? & kotlin.Nothing")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T? & kotlin.Nothing? & K")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("T? & kotlin.Nothing? & K")!>x<!>
println(1)
}
}
@@ -40,8 +40,8 @@ inline fun <reified T, reified K> case_3() {
// TESTCASE NUMBER: 4
inline fun <reified T, reified K> case_4(x: T?) {
if (x is K) {
<!DEBUG_INFO_EXPRESSION_TYPE("T? & K!! & T?!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T? & K!! & T?!!")!>x<!>.equals(x)
<!DEBUG_INFO_EXPRESSION_TYPE("T? & K & T?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("T? & K & T?")!>x<!><!UNSAFE_CALL!>.<!>equals(x)
}
}
@@ -6,13 +6,13 @@
inline fun <reified T> case_1(x: Any?) {
when (x) {
is T -> {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
else -> return
}
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
// TESTCASE NUMBER: 2
@@ -23,13 +23,13 @@ inline fun <reified T> case_2(x: Any?) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
}
is T -> {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
else -> return
}
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
// TESTCASE NUMBER: 3
@@ -61,11 +61,11 @@ inline fun <reified T> case_4(x: Any?) {
// TESTCASE NUMBER: 5
inline fun <reified T> case_5(x: Any?) {
if (x is T) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
} else return
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
// TESTCASE NUMBER: 6
@@ -81,9 +81,9 @@ inline fun <reified T> case_7(x: Any?) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
} else if (x is T) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
} else return
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & kotlin.Any")!>x<!>.equals(10)
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any?")!>x<!><!UNSAFE_CALL!>.<!>equals(10)
}
@@ -118,7 +118,7 @@ fun case_11(x: Any?) {
inline fun <reified T, reified K>case_12(x: Any?) {
if (x is T) {
if (<!USELESS_IS_CHECK!>x is T<!> is K) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
}
}
}
@@ -127,7 +127,7 @@ inline fun <reified T, reified K>case_12(x: Any?) {
inline fun <reified T, reified K>case_13(x: Any?) {
if (x is T) {
if (x is K) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!! & K!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T & K")!>x<!>
}
}
}
@@ -136,7 +136,7 @@ inline fun <reified T, reified K>case_13(x: Any?) {
inline fun <reified T, reified K>case_14(x: Any?) {
if (x is T) {
if (<!USELESS_IS_CHECK!>x !is T<!>) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
}
}
}
@@ -145,7 +145,7 @@ inline fun <reified T, reified K>case_14(x: Any?) {
inline fun <reified T, reified K>case_15(x: Any?) {
if (x !is T) {
if (x is T) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T!!")!>x<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any? & T")!>x<!>
}
}
}