Fix mapping of nullable generic underlying types of inline classes

#KT-32162 Fixed
This commit is contained in:
Ilmir Usmanov
2022-02-22 00:15:32 +01:00
committed by teamcity
parent 981f8b1871
commit 8811f62300
77 changed files with 3400 additions and 131 deletions
@@ -5,6 +5,9 @@
OPTIONAL_JVM_INLINE_ANNOTATION
value class AsAny<T>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class AsAny2<T: Any>(val x: T?)
OPTIONAL_JVM_INLINE_ANNOTATION
value class AsInt<T: Int>(val x: T)
@@ -18,6 +21,14 @@ object Reference {
fun <T, R> transformNullableToNullableTarget(a: AsAny<T>?): AsAny<R>? = a as AsAny<R>?
}
object Reference2 {
fun <T: Any, R: Any> transform(a: AsAny2<T>): AsAny2<R> = a as AsAny2<R>
fun <T: Any, R: Any> transformNullable(a: AsAny2<T>?): AsAny2<R> = a as AsAny2<R>
fun <T: Any, R: Any> transformToNullable(a: AsAny2<T>): AsAny2<R>? = a as AsAny2<R>
fun <T: Any, R: Any> transformToNullableTarget(a: AsAny2<T>): AsAny2<R>? = a as AsAny2<R>?
fun <T: Any, R: Any> transformNullableToNullableTarget(a: AsAny2<T>?): AsAny2<R>? = a as AsAny2<R>?
}
object Primitive {
fun <T: Int> transform(a: AsInt<T>): AsInt<T> = a as AsInt<T>
fun <T: Int> transformNullable(a: AsInt<T>?): AsInt<T> = a as AsInt<T>
@@ -38,6 +49,17 @@ fun box(): String {
val b7 = a.checkcast<AsAny<Number>>()
if (b7.x != a.x) return "Fail 1"
val a2 = AsAny2<Int>(42)
val b21 = Reference2.transform<Int, Number>(a2)
val b22 = Reference2.transformNullable<Int, Number>(a2)
val b23 = Reference2.transformToNullable<Int, Number>(a2)
val b24 = Reference2.transformToNullableTarget<Int, Number>(a2)
val b25 = Reference2.transformNullableToNullableTarget<Int, Number>(a2)
val b26 = Reference2.transformNullableToNullableTarget<Int, Number>(null)
val b72 = a2.checkcast<AsAny2<Number>>()
if (b72.x != a2.x) return "Fail 12"
val c = AsInt(42)
val d1 = Primitive.transform(c)
val d2 = Primitive.transformNullable(c)