Support mapping for inline classes based on type variables

This commit is contained in:
Mikhail Zarechenskiy
2018-02-05 18:43:38 +03:00
parent 0fd80ce980
commit 4eb64fb4b9
8 changed files with 159 additions and 14 deletions
@@ -0,0 +1,30 @@
// !LANGUAGE: +InlineClasses
inline class Foo<T>(val x: List<T>)
object Test {
fun nonNullTypeArgument(f: Foo<Int>) {}
fun nullableTypeArgument(f: Foo<String?>) {}
fun nullableValue(f: Foo<Long>?) {}
}
// method: Test::nonNullTypeArgument
// jvm signature: (Ljava/util/List;)V
// generic signature: (Ljava/util/List<Ljava/lang/Integer;>;)V
// method: Test::nullableTypeArgument
// jvm signature: (Ljava/util/List;)V
// generic signature: (Ljava/util/List<Ljava/lang/String;>;)V
// method: Test::nullableValue
// jvm signature: (Ljava/util/List;)V
// generic signature: (Ljava/util/List<Ljava/lang/Long;>;)V
// method: Foo$Erased::box
// jvm signature: (Ljava/util/List;)LFoo;
// generic signature: null
// method: Foo::unbox
// jvm signature: ()Ljava/util/List;
// generic signature: ()Ljava/util/List<TT;>;
@@ -0,0 +1,43 @@
// !LANGUAGE: +InlineClasses
inline class Default<T>(val x: T)
class Inv<T>
object Test {
fun withNotNullPrimitive(a: Default<Int>) {}
fun withAdditionalGenericParameter(x: Inv<String>, y: Default<String>) {}
fun asNullable(a: Default<Int>?) {}
fun asNullableTypeArgument(a: Default<Int?>) {}
fun asNullableAndNullableTypeArgument(a: Default<Int?>?) {}
}
// method: Test::withNotNullPrimitive
// jvm signature: (Ljava/lang/Object;)V
// generic signature: null
// method: Test::withAdditionalGenericParameter
// jvm signature: (LInv;Ljava/lang/Object;)V
// generic signature: (LInv<Ljava/lang/String;>;Ljava/lang/Object;)V
// method: Test::asNullable
// jvm signature: (LDefault;)V
// generic signature: (LDefault<Ljava/lang/Integer;>;)V
// method: Test::asNullableTypeArgument
// jvm signature: (Ljava/lang/Object;)V
// generic signature: null
// method: Test::asNullableAndNullableTypeArgument
// jvm signature: (LDefault;)V
// generic signature: (LDefault<Ljava/lang/Integer;>;)V
// method: Default$Erased:box
// jvm signature: (Ljava/lang/Object;)LDefault;
// generic signature: null
// method: Default:unbox
// jvm signature: ()Ljava/lang/Object
// generic signature: null
@@ -0,0 +1,28 @@
// !LANGUAGE: +InlineClasses
inline class NonNull<T : Any>(val x: T)
inline class NullableValue<T : Any>(val x: T?)
object Test {
fun withNotNullPrimitive(a: NonNull<Int>) {}
fun asNullable(a: NonNull<Int>?) {}
fun withNotNullForNullableValue(a: NullableValue<Int>) {}
fun asNullableForNullableValue(a: NullableValue<Int>?) {}
}
// method: Test::withNotNullPrimitive
// jvm signature: (Ljava/lang/Object;)V
// generic signature: null
// method: Test::asNullable
// jvm signature: (Ljava/lang/Object;)V
// generic signature: null
// method: Test::withNotNullForNullableValue
// jvm signature: (Ljava/lang/Object;)V
// generic signature: null
// method: Test::asNullableForNullableValue
// jvm signature: (LNullableValue;)V
// generic signature: (LNullableValue<Ljava/lang/Integer;>;)V