K2: don't make T = Type! substitutions for constructors, including SAM

Without this commit we get some ABI changes and it looks bad.

Related to KT-65596
This commit is contained in:
Mikhail Glukhikh
2024-02-21 13:58:26 +01:00
committed by Space Team
parent 81414d758d
commit 78b6432ced
27 changed files with 159 additions and 76 deletions
@@ -1,29 +1,29 @@
FILE fqName:<root> fileName:/javaConstructorWithTypeParameters.kt
FUN name:test1 visibility:public modality:FINAL <> () returnType:<root>.J1<@[FlexibleNullability] kotlin.Int?>
FUN name:test1 visibility:public modality:FINAL <> () returnType:<root>.J1<kotlin.Int>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test1 (): <root>.J1<@[FlexibleNullability] kotlin.Int?> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.J1' type=<root>.J1<@[FlexibleNullability] kotlin.Int?> origin=null
<class: T1>: @[FlexibleNullability] kotlin.Int?
FUN name:test2 visibility:public modality:FINAL <> () returnType:<root>.J1<@[FlexibleNullability] kotlin.Int?>
RETURN type=kotlin.Nothing from='public final fun test1 (): <root>.J1<kotlin.Int> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.J1' type=<root>.J1<kotlin.Int> origin=null
<class: T1>: kotlin.Int
FUN name:test2 visibility:public modality:FINAL <> () returnType:<root>.J1<kotlin.Int>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test2 (): <root>.J1<@[FlexibleNullability] kotlin.Int?> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> <X1> (x1: @[FlexibleNullability] X1 of <root>.J1.<init>?) declared in <root>.J1' type=<root>.J1<@[FlexibleNullability] kotlin.Int?> origin=null
<class: T1>: @[FlexibleNullability] kotlin.Int?
RETURN type=kotlin.Nothing from='public final fun test2 (): <root>.J1<kotlin.Int> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> <X1> (x1: @[FlexibleNullability] X1 of <root>.J1.<init>?) declared in <root>.J1' type=<root>.J1<kotlin.Int> origin=null
<class: T1>: kotlin.Int
<X1>: @[FlexibleNullability] kotlin.Int?
x1: CONST Int type=kotlin.Int value=1
FUN name:test3 visibility:public modality:FINAL <> (j1:<root>.J1<kotlin.Any>) returnType:<root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any>
FUN name:test3 visibility:public modality:FINAL <> (j1:<root>.J1<kotlin.Any>) returnType:<root>.J1.J2<kotlin.Int, kotlin.Any>
VALUE_PARAMETER name:j1 index:0 type:<root>.J1<kotlin.Any>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test3 (j1: <root>.J1<kotlin.Any>): <root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.J1.J2' type=<root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any> origin=null
<class: T2>: @[FlexibleNullability] kotlin.Int?
RETURN type=kotlin.Nothing from='public final fun test3 (j1: <root>.J1<kotlin.Any>): <root>.J1.J2<kotlin.Int, kotlin.Any> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.J1.J2' type=<root>.J1.J2<kotlin.Int, kotlin.Any> origin=null
<class: T2>: kotlin.Int
$outer: GET_VAR 'j1: <root>.J1<kotlin.Any> declared in <root>.test3' type=<root>.J1<kotlin.Any> origin=null
FUN name:test4 visibility:public modality:FINAL <> (j1:<root>.J1<kotlin.Any>) returnType:<root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any>
FUN name:test4 visibility:public modality:FINAL <> (j1:<root>.J1<kotlin.Any>) returnType:<root>.J1.J2<kotlin.Int, kotlin.Any>
VALUE_PARAMETER name:j1 index:0 type:<root>.J1<kotlin.Any>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test4 (j1: <root>.J1<kotlin.Any>): <root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> <X2> (x2: @[FlexibleNullability] X2 of <root>.J1.J2.<init>?) declared in <root>.J1.J2' type=<root>.J1.J2<@[FlexibleNullability] kotlin.Int?, kotlin.Any> origin=null
<class: T2>: @[FlexibleNullability] kotlin.Int?
RETURN type=kotlin.Nothing from='public final fun test4 (j1: <root>.J1<kotlin.Any>): <root>.J1.J2<kotlin.Int, kotlin.Any> declared in <root>'
CONSTRUCTOR_CALL 'public constructor <init> <X2> (x2: @[FlexibleNullability] X2 of <root>.J1.J2.<init>?) declared in <root>.J1.J2' type=<root>.J1.J2<kotlin.Int, kotlin.Any> origin=null
<class: T2>: kotlin.Int
<X2>: @[FlexibleNullability] kotlin.Int?
$outer: GET_VAR 'j1: <root>.J1<kotlin.Any> declared in <root>.test4' type=<root>.J1<kotlin.Any> origin=null
x2: CONST Int type=kotlin.Int value=1
@@ -1,15 +1,15 @@
fun test1(): J1<@FlexibleNullability Int?> {
return J1<@FlexibleNullability Int?>()
fun test1(): J1<Int> {
return J1<Int>()
}
fun test2(): J1<@FlexibleNullability Int?> {
return J1<@FlexibleNullability Int?, @FlexibleNullability Int?>(x1 = 1)
fun test2(): J1<Int> {
return J1<Int, @FlexibleNullability Int?>(x1 = 1)
}
fun test3(j1: J1<Any>): J2<@FlexibleNullability Int?, Any> {
return j1.J2<@FlexibleNullability Int?>()
fun test3(j1: J1<Any>): J2<Int, Any> {
return j1.J2<Int>()
}
fun test4(j1: J1<Any>): J2<@FlexibleNullability Int?, Any> {
return j1.J2<@FlexibleNullability Int?, @FlexibleNullability Int?>(x2 = 1)
fun test4(j1: J1<Any>): J2<Int, Any> {
return j1.J2<Int, @FlexibleNullability Int?>(x2 = 1)
}