[NI] Remove lambda coersion to Unit in case of error return type(s)
Coersion to Unit from error type leads to misleading type mismatches: "expected <expected lambda return type> found Unit", despite no user-provided Unit / empty lambda. These diagnostics were collected, but not reported before, and that had been disguising the issue for a while. KT-34729 Fixed
This commit is contained in:
+74
@@ -0,0 +1,74 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
fun takeFnToAny(fn: () -> Any) {}
|
||||
fun takeFnToUnit(fn: () -> Unit) {}
|
||||
fun <P> takeFnToParameter(fn: () -> P) {}
|
||||
|
||||
fun testAny() {
|
||||
takeFnToAny { }
|
||||
takeFnToAny { Unit }
|
||||
takeFnToAny { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny(fun() = Unit)
|
||||
takeFnToAny(fun() {})
|
||||
takeFnToAny(fun() { return })
|
||||
takeFnToAny(fun() { return Unit })
|
||||
takeFnToAny(fun(): Unit {})
|
||||
takeFnToAny(fun(): Unit { return })
|
||||
takeFnToAny(fun(): Unit { return Unit })
|
||||
takeFnToAny(fun() { if (true) return })
|
||||
takeFnToAny(fun() { if (true) return Unit })
|
||||
takeFnToAny(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToAny(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
|
||||
fun testUnit() {
|
||||
takeFnToUnit { }
|
||||
takeFnToUnit { Unit }
|
||||
takeFnToUnit { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit(fun() = Unit)
|
||||
takeFnToUnit(fun() {})
|
||||
takeFnToUnit(fun() { return })
|
||||
takeFnToUnit(fun() { return Unit })
|
||||
takeFnToUnit(fun(): Unit {})
|
||||
takeFnToUnit(fun(): Unit { return })
|
||||
takeFnToUnit(fun(): Unit { return Unit })
|
||||
takeFnToUnit(fun() { if (true) return })
|
||||
takeFnToUnit(fun() { if (true) return Unit })
|
||||
takeFnToUnit(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToUnit(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
|
||||
fun testParameter() {
|
||||
takeFnToParameter { }
|
||||
takeFnToParameter { Unit }
|
||||
takeFnToParameter { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToParameter { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToParameter {
|
||||
if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>()
|
||||
}
|
||||
takeFnToParameter(fun() = Unit)
|
||||
takeFnToParameter(fun() {})
|
||||
takeFnToParameter(fun() { return })
|
||||
takeFnToParameter(fun() { return Unit })
|
||||
takeFnToParameter(fun(): Unit {})
|
||||
takeFnToParameter(fun(): Unit { return })
|
||||
takeFnToParameter(fun(): Unit { return Unit })
|
||||
takeFnToParameter(fun() { if (true) return })
|
||||
takeFnToParameter(fun() { if (true) return Unit })
|
||||
takeFnToParameter(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToParameter(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
fun takeFnToAny(fn: () -> Any) {}
|
||||
fun takeFnToUnit(fn: () -> Unit) {}
|
||||
fun <P> takeFnToParameter(fn: () -> P) {}
|
||||
|
||||
fun testAny() {
|
||||
takeFnToAny { }
|
||||
takeFnToAny { Unit }
|
||||
takeFnToAny { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToAny(fun() = Unit)
|
||||
takeFnToAny(fun() {})
|
||||
takeFnToAny(fun() { return })
|
||||
takeFnToAny(fun() { return Unit })
|
||||
takeFnToAny(fun(): Unit {})
|
||||
takeFnToAny(fun(): Unit { return })
|
||||
takeFnToAny(fun(): Unit { return Unit })
|
||||
takeFnToAny(fun() { if (true) return })
|
||||
takeFnToAny(fun() { if (true) return Unit })
|
||||
takeFnToAny(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToAny(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToAny(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
|
||||
fun testUnit() {
|
||||
takeFnToUnit { }
|
||||
takeFnToUnit { Unit }
|
||||
takeFnToUnit { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToUnit(fun() = Unit)
|
||||
takeFnToUnit(fun() {})
|
||||
takeFnToUnit(fun() { return })
|
||||
takeFnToUnit(fun() { return Unit })
|
||||
takeFnToUnit(fun(): Unit {})
|
||||
takeFnToUnit(fun(): Unit { return })
|
||||
takeFnToUnit(fun(): Unit { return Unit })
|
||||
takeFnToUnit(fun() { if (true) return })
|
||||
takeFnToUnit(fun() { if (true) return Unit })
|
||||
takeFnToUnit(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToUnit(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToUnit(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
|
||||
fun testParameter() {
|
||||
takeFnToParameter { }
|
||||
takeFnToParameter { Unit }
|
||||
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeFnToParameter<!> { <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
takeFnToParameter { if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() }
|
||||
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeFnToParameter<!> {
|
||||
if (true) <!UNRESOLVED_REFERENCE!>unresolved<!>() else <!UNRESOLVED_REFERENCE!>unresolved<!>()
|
||||
}
|
||||
takeFnToParameter(fun() = Unit)
|
||||
takeFnToParameter(fun() {})
|
||||
takeFnToParameter(fun() { return })
|
||||
takeFnToParameter(fun() { return Unit })
|
||||
takeFnToParameter(fun(): Unit {})
|
||||
takeFnToParameter(fun(): Unit { return })
|
||||
takeFnToParameter(fun(): Unit { return Unit })
|
||||
takeFnToParameter(fun() { if (true) return })
|
||||
takeFnToParameter(fun() { if (true) return Unit })
|
||||
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeFnToParameter<!>(fun() = <!UNRESOLVED_REFERENCE!>unresolved<!>())
|
||||
takeFnToParameter(fun() { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun(): Unit { <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun() { return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
takeFnToParameter(fun() { if (true ) return <!UNRESOLVED_REFERENCE!>unresolved<!>() })
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public fun takeFnToAny(/*0*/ fn: () -> kotlin.Any): kotlin.Unit
|
||||
public fun </*0*/ P> takeFnToParameter(/*0*/ fn: () -> P): kotlin.Unit
|
||||
public fun takeFnToUnit(/*0*/ fn: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun testAny(): kotlin.Unit
|
||||
public fun testParameter(): kotlin.Unit
|
||||
public fun testUnit(): kotlin.Unit
|
||||
Reference in New Issue
Block a user