Expected function type used for parameter types inference in function expression

This commit is contained in:
Stanislav Erokhin
2015-03-04 20:10:47 +03:00
parent 639003b8a8
commit f47f285868
6 changed files with 56 additions and 12 deletions
@@ -17,7 +17,7 @@ fun testParamType() {
bar.checkType { it : _<(String) -> Unit> }
val bas: (String) -> Unit = fun (param: String) {}
val bag: (Int) -> Unit = <!TYPE_MISMATCH!>fun (param: String) {}<!>
val bag: (Int) -> Unit = <!TYPE_MISMATCH!>fun (<!EXPECTED_PARAMETER_TYPE_MISMATCH!>param: String<!>) {}<!>
}
fun testReceiverType() {
@@ -0,0 +1,25 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
val a = fun (<!CANNOT_INFER_PARAMETER_TYPE!>x<!>) = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!>
val b: (Int) -> Int = fun (x) = x + 3
val c: (Int, String) -> Int = <!TYPE_MISMATCH!>fun <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(x)<!> = 3<!>
val d: (Int, String) -> Int = <!TYPE_MISMATCH!>fun <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(x)<!> = 3<!>
val e: (Int, String) -> Int = <!TYPE_MISMATCH!>fun <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>x: String<!>)<!> = 3<!>
val f: (Int) -> Int = <!TYPE_MISMATCH!>fun (<!EXPECTED_PARAMETER_TYPE_MISMATCH!>x: String<!>) = 3<!>
fun test1(a: (Int) -> Unit) {
test1(fun (<!CANNOT_INFER_PARAMETER_TYPE!>x<!>) { <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!> : Int})
}
fun test2(a: (Int) -> Unit) {
test2(<!TYPE_MISMATCH!>fun (x: String) {}<!>)
}
fun test3(a: (Int, String) -> Unit) {
test3(<!TYPE_MISMATCH!>fun (x: String) {}<!>)
}
@@ -0,0 +1,11 @@
package
internal val a: (???) -> [ERROR : Cannot be inferred]
internal val b: (kotlin.Int) -> kotlin.Int
internal val c: (kotlin.Int, kotlin.String) -> kotlin.Int
internal val d: (kotlin.Int, kotlin.String) -> kotlin.Int
internal val e: (kotlin.Int, kotlin.String) -> kotlin.Int
internal val f: (kotlin.Int) -> kotlin.Int
internal fun test1(/*0*/ a: (kotlin.Int) -> kotlin.Unit): kotlin.Unit
internal fun test2(/*0*/ a: (kotlin.Int) -> kotlin.Unit): kotlin.Unit
internal fun test3(/*0*/ a: (kotlin.Int, kotlin.String) -> kotlin.Unit): kotlin.Unit