Kapt+JVM_IR: generate delegated members correctly

Generate a declaration for each delegated member without body. If we
don't generate delegated declarations, subclasses will have incorrect IR
with unbound symbols in fake overrides.

 #KT-58027 Fixed
This commit is contained in:
Alexander Udalov
2023-04-17 22:37:29 +02:00
committed by Space Team
parent 5407ac1c72
commit bc7aea1426
7 changed files with 125 additions and 14 deletions
@@ -0,0 +1,39 @@
@kotlin.Metadata()
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
public abstract interface A {
@org.jetbrains.annotations.NotNull()
public static final A.Companion Companion = null;
public abstract void inject(@org.jetbrains.annotations.NotNull()
A.B b);
@org.jetbrains.annotations.NotNull()
public abstract java.lang.String getX();
@kotlin.Metadata()
public static abstract class B implements A {
public B() {
super();
}
@java.lang.Override()
@org.jetbrains.annotations.NotNull()
public java.lang.String getX() {
return null;
}
@java.lang.Override()
public void inject(@org.jetbrains.annotations.NotNull()
A.B b) {
}
}
@kotlin.Metadata()
public static final class Companion extends A.B {
private Companion() {
super();
}
}
}
@@ -0,0 +1,11 @@
// CORRECT_ERROR_TYPES
@Suppress("UNRESOLVED_REFERENCE")
interface A {
fun inject(b: B)
val x: String
companion object : B()
abstract class B : A by Unresolved
}
@@ -0,0 +1,39 @@
@kotlin.Metadata()
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
public abstract interface A {
@org.jetbrains.annotations.NotNull()
public static final A.Companion Companion = null;
public abstract void inject(@org.jetbrains.annotations.NotNull()
A.B b);
@org.jetbrains.annotations.NotNull()
public abstract java.lang.String getX();
@kotlin.Metadata()
public static abstract class B implements A {
@java.lang.Override()
public void inject(@org.jetbrains.annotations.NotNull()
A.B b) {
}
@java.lang.Override()
@org.jetbrains.annotations.NotNull()
public java.lang.String getX() {
return null;
}
public B() {
super();
}
}
@kotlin.Metadata()
public static final class Companion extends A.B {
private Companion() {
super();
}
}
}