[NI] Remove Nothing result type restriction in most cases

Make Nothing as result type not suitable only for if, when, try and ?: special functions.
This commit is contained in:
Pavel Kirpichenkov
2019-12-23 12:28:39 +03:00
parent ae1630f376
commit a9391c8dfb
21 changed files with 172 additions and 41 deletions
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
fun <K> select2(x: K, y: K): K = TODO()
@@ -0,0 +1,22 @@
// !LANGUAGE: +NewInference
class Query<out T : Any> private constructor(
private val result: T?,
private val error: Throwable?,
val inProgress: Boolean
) {
companion object {
val inProgress = Query(null, null, true)
fun forError(e: Throwable) = Query(null, e, false)
fun <T : Any> forResult(result: T) = Query(result, null, false)
}
}
class MutableLiveData<T> {
var value: Query<Int> = null!!
}
fun main() {
val liveData = MutableLiveData<Query<Int>>()
liveData.value = Query.inProgress // Type mismatch: inferred type is Query<Any> but Query<Int> was expected
}
@@ -0,0 +1,22 @@
// !LANGUAGE: +NewInference
class Query<out T : Any> private constructor(
private val result: T?,
private val error: Throwable?,
val inProgress: Boolean
) {
companion object {
val inProgress = Query(null, null, true)
fun forError(e: Throwable) = Query(null, e, false)
fun <T : Any> forResult(result: T) = Query(result, null, false)
}
}
class MutableLiveData<T> {
var value: Query<Int> = null!!
}
fun main() {
val liveData = MutableLiveData<Query<Int>>()
liveData.value = Query.inProgress // Type mismatch: inferred type is Query<Any> but Query<Int> was expected
}
@@ -0,0 +1,31 @@
package
public fun main(): kotlin.Unit
public final class MutableLiveData</*0*/ T> {
public constructor MutableLiveData</*0*/ T>()
public final var value: Query<kotlin.Int>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Query</*0*/ out T : kotlin.Any> {
private constructor Query</*0*/ out T : kotlin.Any>(/*0*/ result: T?, /*1*/ error: kotlin.Throwable?, /*2*/ inProgress: kotlin.Boolean)
private final val error: kotlin.Throwable?
public final val inProgress: kotlin.Boolean
private final val result: T?
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public final val inProgress: Query<kotlin.Nothing>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun forError(/*0*/ e: kotlin.Throwable): Query<kotlin.Nothing>
public final fun </*0*/ T : kotlin.Any> forResult(/*0*/ result: T): Query<T>
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}