[FIR] Assume nullable types as good types for ILT approximation

#KT-41982 Fixed
This commit is contained in:
Dmitriy Novozhilov
2020-09-18 13:48:29 +03:00
parent f069857492
commit 40a9bb6eac
10 changed files with 75 additions and 11 deletions
@@ -0,0 +1,17 @@
// ISSUE: KT-41982
import kotlin.reflect.KProperty
class Delegate<R, T> {
operator fun getValue(thisRef: R, property: KProperty<*>): T = null!!
operator fun setValue(thisRef: R, property: KProperty<*>, value: T) {}
}
abstract class DelegateProvider<in Type>
fun <Type : Base, Base : DelegateProvider<Base>> Type.long(initializer: (() -> Long?)? = null): Delegate<Type, Long> = null!!
class Test : DelegateProvider<Any>() {
var start by long { 0 }
}
@@ -0,0 +1,40 @@
FILE: kt41982.kt
public final class Delegate<R, T> : R|kotlin/Any| {
public constructor<R, T>(): R|Delegate<R, T>| {
super<R|kotlin/Any|>()
}
public final operator fun getValue(thisRef: R|R|, property: R|kotlin/reflect/KProperty<*>|): R|T| {
^getValue Null(null)!!
}
public final operator fun setValue(thisRef: R|R|, property: R|kotlin/reflect/KProperty<*>|, value: R|T|): R|kotlin/Unit| {
}
}
public abstract class DelegateProvider<in Type> : R|kotlin/Any| {
public constructor<in Type>(): R|DelegateProvider<Type>| {
super<R|kotlin/Any|>()
}
}
public final fun <Type : R|Base|, Base : R|DelegateProvider<Base>|> R|Type|.long(initializer: R|() -> kotlin/Long?| = Null(null)): R|Delegate<Type, kotlin/Long>| {
^long Null(null)!!
}
public final class Test : R|DelegateProvider<kotlin/Any>| {
public constructor(): R|Test| {
super<R|DelegateProvider<kotlin/Any>|>()
}
public final var start: R|kotlin/Long|by this@R|/Test|.R|/long|<R|Test?|, R|Test?|>(<L> = long@fun <anonymous>(): R|kotlin/Long?| {
^ Long(0)
}
)
public get(): R|kotlin/Long| {
^ this@R|/Test|.D|/Test.start|.R|FakeOverride</Delegate.getValue: R|kotlin/Long|>|(this@R|/Test|, ::R|/Test.start|)
}
public set(<set-?>: R|kotlin/Long|): R|kotlin/Unit| {
this@R|/Test|.D|/Test.start|.R|FakeOverride</Delegate.setValue: R|kotlin/Unit|>|(this@R|/Test|, ::R|/Test.start|, R|<local>/start|)
}
}