[FIR2IR] Unwrap call-site substitution overrides

Generating IR declarations for use-site substitution overrides leads
to IR that is different from K1 as well as problems in signature
generation which relies on mangling. Use-site substitutions can contain
references to type parameters from the call-site which aren't handled
in mangling.

#KT-57022 Fixed
This commit is contained in:
Kirill Rakhman
2023-06-07 16:16:36 +02:00
committed by Space Team
parent bcdd85758e
commit 86836e69e9
10 changed files with 248 additions and 121 deletions
@@ -1,21 +1,47 @@
// FIR_IDENTICAL
// TARGET_BACKEND: JVM_IR
// ISSUE: KT-57022
// MUTE_SIGNATURE_COMPARISON_K2: ANY
// ^ KT-57022
// FILE: J.java
// FILE: JavaClass1.java
import org.jetbrains.annotations.Nullable;
public class J<T extends @Nullable Object> {
public class JavaClass1<T extends @Nullable Object> {
public class A {
public void output(T x) {}
}
public class B extends A {}
public class B extends A {
}
}
// FILE: JavaClass2.java
import org.jetbrains.annotations.Nullable;
public abstract class JavaClass2<T extends @Nullable Object, R extends @Nullable Object> {
public abstract class A {
public abstract void output(R output);
}
public abstract class B extends A {
public abstract T element();
}
}
// FILE: test.kt
class Test<T>(val x: T) : J<T>() {
class Inv<T>(val x: T)
class Test_1<TT>(val x: TT) : JavaClass1<TT>() {
fun test(b: B) { b.output(x) }
}
class Test_2<TT> : JavaClass2<TT, Inv<TT>>() {
fun process(b: B) {
b.output(Inv(b.element()))
}
}
fun <R> test_3(jb: JavaClass1<R>.B, r: R) {
jb.output(r)
}