[NI] Discard DefNotNull types inside invariant positions

#KT-30297 Fixed
 #KT-32168 Fixed
 #KT-27722 Fixed (actually, it was fixed with addition of DefNotNullTypes, and now test was added to save this behavior)
 #KT-32345 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2019-10-31 14:51:30 +03:00
parent 4fc1bd9ec5
commit 5582fd4056
16 changed files with 251 additions and 10 deletions
@@ -0,0 +1,24 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION
class Inv<T>(val x: T?)
fun <K> create(y: K) = Inv(y)
fun <K> createPrivate(y: K) = Inv(y)
fun takeInvInt(i: Inv<Int>) {}
fun <S> test(i: Int, s: S) {
val a = Inv(s)
<!DEBUG_INFO_EXPRESSION_TYPE("Inv<S>")!>a<!>
val b = create(i)
<!DEBUG_INFO_EXPRESSION_TYPE("Inv<kotlin.Int>")!>b<!>
val c = createPrivate(i)
<!DEBUG_INFO_EXPRESSION_TYPE("Inv<kotlin.Int>")!>c<!>
takeInvInt(create(i))
}
@@ -0,0 +1,14 @@
package
public fun </*0*/ K> create(/*0*/ y: K): Inv<K>
public fun </*0*/ K> createPrivate(/*0*/ y: K): Inv<K>
public fun takeInvInt(/*0*/ i: Inv<kotlin.Int>): kotlin.Unit
public fun </*0*/ S> test(/*0*/ i: kotlin.Int, /*1*/ s: S): kotlin.Unit
public final class Inv</*0*/ T> {
public constructor Inv</*0*/ T>(/*0*/ x: T?)
public final val x: 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
}
@@ -0,0 +1,15 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
import kotlin.reflect.KProperty
class Foo {
var test: String by refreshOnUpdate("str")
fun <T> refreshOnUpdate(initialValue: T) = RefreshDelegate(initialValue)
class RefreshDelegate<T>(initialValue: T?) {
operator fun getValue(thisRef: Foo, property: KProperty<*>): T = TODO()
operator fun setValue(thisRef: Foo, property: KProperty<*>, value: T) {}
}
}
@@ -0,0 +1,19 @@
package
public final class Foo {
public constructor Foo()
public final var test: kotlin.String
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 final fun </*0*/ T> refreshOnUpdate(/*0*/ initialValue: T): Foo.RefreshDelegate<T>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class RefreshDelegate</*0*/ T> {
public constructor RefreshDelegate</*0*/ T>(/*0*/ initialValue: T?)
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final operator fun getValue(/*0*/ thisRef: Foo, /*1*/ property: kotlin.reflect.KProperty<*>): T
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final operator fun setValue(/*0*/ thisRef: Foo, /*1*/ property: kotlin.reflect.KProperty<*>, /*2*/ value: T): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}