FIR initializer: don't report type mismatch on incompatible extensions

This commit suppresses type mismatch error from KT-45989
This commit is contained in:
Mikhail Glukhikh
2021-04-09 16:15:05 +03:00
parent fa4d664a18
commit 69d1ef423a
11 changed files with 54 additions and 6 deletions
@@ -24,6 +24,6 @@ class A : (@Ann Int)->Unit {
@Target(AnnotationTarget.TYPE)
annotation class TypeAnn
val onType: (@TypeAnn A).(@Ann a: @TypeAnn A, @TypeAnn A)->@TypeAnn A? = <!INITIALIZER_TYPE_MISMATCH!>{ null }<!>
val onType: (@TypeAnn A).(@Ann a: @TypeAnn A, @TypeAnn A)->@TypeAnn A? = { null }
fun (@TypeAnn A).extFun(@Ann a: @TypeAnn A): @TypeAnn A? = null
@@ -28,5 +28,5 @@ fun testReceiverType() {
val bas: String.() -> Unit = fun String.() {}
val bag: Int.() -> Unit = <!INITIALIZER_TYPE_MISMATCH!>fun String.() {}<!>
val bag: Int.() -> Unit = fun String.() {}
}
@@ -23,7 +23,7 @@ fun main() {
foo(fun(): String = <!ARGUMENT_TYPE_MISMATCH!>"1"<!>)
foo(((fun(): String = <!ARGUMENT_TYPE_MISMATCH!>"1"<!>)))
val a10: Int.(String) -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun (x: String) = 10<!>
val a10: Int.(String) -> Int = fun (x: String) = 10
val a11: () -> () -> () -> Int = fun() = fun() = fun(): String = "1"
val a12: Int = <!INITIALIZER_TYPE_MISMATCH!>fun(): String = "1"<!>
@@ -153,7 +153,7 @@ fun main() {
// Convert to extension lambda is impossible because the lambda parameter types aren't specified explicitly
select(id(fun String.(x: String) {}), id(fun(x: String, y: String) { }), { x, y -> x })
select(id(id(fun(x: String, y: String) { }), <!TOO_MANY_ARGUMENTS!>fun String.(x: String) {}<!>), { x, y -> x })
val x26: Int.(String) -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun (x: String) = 10<!> // it must be error, see KT-38439
val x26: Int.(String) -> Int = fun (x: String) = 10 // it must be error, see KT-38439
// Receiver must be specified in anonymous function declaration
val x27: Int.(String) -> Int = id(fun (x: String) = 10)
select(id<Int.(String) -> Unit> {}, { x: Int, y: String -> x })
@@ -5,5 +5,5 @@ val test2f: suspend Any.() -> Unit = fun Any.() {}
// This is a bug in the old inference and should be fixed in new inference
// see "Fix anonymous function literals handling in type checker" for more details
val test3f: suspend Any.(Int) -> Int = <!INITIALIZER_TYPE_MISMATCH!>fun (k: Int) = k + 1<!>
val test4f: SuspendFn = <!INITIALIZER_TYPE_MISMATCH!>fun Any.() {}<!>
val test3f: suspend Any.(Int) -> Int = fun (k: Int) = k + 1
val test4f: SuspendFn = fun Any.() {}