Reuse built functional types for postponed arguments by expected types and paths from a top level type variable

^KT-42221 Fixed
This commit is contained in:
Victor Petukhov
2020-10-14 18:02:17 +03:00
parent ee5edf4caa
commit c6da2a1138
18 changed files with 538 additions and 57 deletions
@@ -0,0 +1,40 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
fun <T> id(x: T) = x
class A {
val x: Map<String, (String, String, String, String) -> Unit> =
mapOf(
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> },
"" to id { a, b, c, d -> }
)
}
@@ -0,0 +1,38 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
class A {
val x: Map<String, (String, String, String, String) -> Unit> =
mapOf(
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> },
"" to { a, b, c, d -> }
)
}
@@ -0,0 +1,42 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -CAST_NEVER_SUCCEEDS
interface Foo<out K, out V> {}
fun <K, V> fooOf(vararg pairs: Pair<K, V>) = null as Foo<K, V>
fun <A, B> to(th: A, that: B): Pair<A, B> = Pair(th, that)
class A {
val x: Foo<(Int, String, String, String) -> Unit, (String, String, String, String) -> Unit> =
fooOf(
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
to({ a, b, c, d -> }, { a, b, c, d -> }),
)
}
@@ -0,0 +1,46 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -CAST_NEVER_SUCCEEDS
fun <T> id(x: T) = x
interface Foo<out K, out V> {}
fun <K, V> fooOf(vararg pairs: Pair<K, V>) = null as Foo<K, V>
fun <A, B> to(th: A, that: B): Pair<A, B> = Pair(th, that)
class Inv<K>(x: K)
class A {
val x: Foo<Inv<(Int) -> Unit>, Inv<(String, String, String, String) -> Unit>> =
fooOf(
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
to(Inv { a -> }, Inv { a, b, c, d -> }),
)
}
@@ -0,0 +1,48 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
fun <T> id(x: T) = x
interface Foo<out K, out V> {}
fun <K, V> fooOf(vararg pairs: Pair<K, V>) = null as Foo<K, V>
fun <A, B> to(th: A, that: B): Pair<A, B> = Pair(th, that)
class Inv<K>(x: K)
fun <A: (Int, Int, Int, Int) -> Unit> take(x: A, y: A) = null as (Int, String, String, String) -> Unit
class A {
val x: Foo<Inv<(Int, String, String, String) -> Unit>, Inv<(Int, String, String, String) -> Unit>> =
fooOf(
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv(take({ a, b, c, d -> }, { a, b, c, d -> }))),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv(take({ a, b, c, d -> }, { a, b, c, d -> }))),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv(take({ a, b, c, d -> }, { a, b, c, d -> }))),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv(take({ a, b, c, d -> }, { a, b, c, d -> }))),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv(take({ a, b, c, d -> }, { a, b, c, d -> }))),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
to(Inv(take({ a, b, c, d -> }, { a, b, c, d -> })), Inv { a, b, c, d -> }),
)
}
@@ -0,0 +1,44 @@
// FIR_IDENTICAL
// SKIP_TXT
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -CAST_NEVER_SUCCEEDS
fun <T> id(x: T) = x
interface Foo<out K, out V> {}
fun <K, V> fooOf(vararg pairs: Pair<K, V>) = null as Foo<K, V>
fun <A, B> to(th: A, that: B): Pair<A, B> = Pair(th, that)
class A {
val x: Foo<(Int, String, String, String) -> Unit, (String, String, String, String) -> Unit> =
fooOf(
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
to(id { a, b, c, d -> }, id { a, b, c, d -> }),
)
}