[FIR] Fix reporting of CANNOT_INFER_PARAMETER_TYPE on lambda parameters

^KT-56138 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-02-01 13:08:53 +02:00
committed by Space Team
parent 76d360d793
commit f479a56f5e
16 changed files with 126 additions and 18 deletions
@@ -0,0 +1,37 @@
// SKIP_TXT
// ISSUE: KT-56138
fun takeLambda1(f: String.() -> String) {}
fun takeLambda2(f: String.(String) -> String) {}
fun test_1() {
val x1: String.(String) -> String = { str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!> -> "this" }
val x2: String.() -> String = { <!UNRESOLVED_REFERENCE!>it<!> }
val x3: String.() -> String = { <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> "x" }
}
fun test_2() {
takeLambda2 <!ARGUMENT_TYPE_MISMATCH!>{ str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!> -> "this" }<!>
takeLambda1 { <!UNRESOLVED_REFERENCE!>it<!> }
takeLambda1 <!ARGUMENT_TYPE_MISMATCH!>{ <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> "x" }<!>
}
fun test_3(b: Boolean) {
val x1: String.(String) -> String = if (b) {
{ str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!> -> "this" }
} else {
{ str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!> -> "this" }
}
val x2: String.() -> String = if (b) {
{ <!UNRESOLVED_REFERENCE!>it<!> }
} else {
{ <!UNRESOLVED_REFERENCE!>it<!> }
}
val x3: String.() -> String = if (b) {
{ <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> "x" }
} else {
{ <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> "x" }
}
}
@@ -0,0 +1,37 @@
// SKIP_TXT
// ISSUE: KT-56138
fun takeLambda1(f: String.() -> String) {}
fun takeLambda2(f: String.(String) -> String) {}
fun test_1() {
val x1: String.(String) -> String = { <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!><!> -> "this" }
val x2: String.() -> String = { <!UNRESOLVED_REFERENCE!>it<!> }
val x3: String.() -> String = { <!CANNOT_INFER_PARAMETER_TYPE, EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x<!> -> "x" }
}
fun test_2() {
takeLambda2 <!TYPE_MISMATCH!>{ <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!><!> -> "this" }<!>
takeLambda1 <!TYPE_MISMATCH!>{ <!UNRESOLVED_REFERENCE!>it<!> }<!>
takeLambda1 <!TYPE_MISMATCH!>{ <!CANNOT_INFER_PARAMETER_TYPE, EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x<!> -> "x" }<!>
}
fun test_3(b: Boolean) {
val x1: String.(String) -> String = if (b) <!TYPE_MISMATCH!>{
{ <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!><!> -> "this" }
}<!> else <!TYPE_MISMATCH!>{
{ <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>str, <!CANNOT_INFER_PARAMETER_TYPE!>str2<!><!> -> "this" }
}<!>
val x2: String.() -> String = if (b) <!TYPE_MISMATCH!>{
{ <!UNRESOLVED_REFERENCE!>it<!> }
}<!> else <!TYPE_MISMATCH!>{
{ <!UNRESOLVED_REFERENCE!>it<!> }
}<!>
val x3: String.() -> String = if (b) <!TYPE_MISMATCH!>{
{ <!CANNOT_INFER_PARAMETER_TYPE, EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x<!> -> "x" }
}<!> else <!TYPE_MISMATCH!>{
{ <!CANNOT_INFER_PARAMETER_TYPE, EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x<!> -> "x" }
}<!>
}