[FIR2IR] Properly approximate intersection types during fir2ir conversion

^KT-62544 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-10-16 13:19:40 +03:00
committed by Space Team
parent 8c6da9fddb
commit 9366847e96
52 changed files with 450 additions and 803 deletions
@@ -1,51 +0,0 @@
@kotlin.Metadata
public interface A {
// source: 'nonApproxToValidSupertype.kt'
}
@kotlin.Metadata
public interface B {
// source: 'nonApproxToValidSupertype.kt'
}
@kotlin.Metadata
public final class G {
// source: 'nonApproxToValidSupertype.kt'
public method <init>(): void
public final method check(@org.jetbrains.annotations.NotNull p0: IFoo): void
}
@kotlin.Metadata
public interface IFoo {
// source: 'nonApproxToValidSupertype.kt'
public abstract method accept(@org.jetbrains.annotations.NotNull p0: X): void
}
@kotlin.Metadata
final class NonApproxToValidSupertypeKt$test$1 {
// source: 'nonApproxToValidSupertype.kt'
enclosing method NonApproxToValidSupertypeKt.test()V
public final static field INSTANCE: NonApproxToValidSupertypeKt$test$1
inner (anonymous) class NonApproxToValidSupertypeKt$test$1
static method <clinit>(): void
method <init>(): void
public final method accept(p0: X): void
}
@kotlin.Metadata
public final class NonApproxToValidSupertypeKt {
// source: 'nonApproxToValidSupertype.kt'
inner (anonymous) class NonApproxToValidSupertypeKt$test$1
public final static method sel(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public final static method test(): void
}
@kotlin.Metadata
public interface X {
// source: 'nonApproxToValidSupertype.kt'
}
@kotlin.Metadata
public interface Z {
// source: 'nonApproxToValidSupertype.kt'
}
@@ -1,6 +1,3 @@
// K1 generates `accept(Object)` and bridge `accept(X)` in the SAM adapter.
// K2 generates `accept(X)` only. It is fine though, because if `check`'s parameter is passed where Z is expected, checkcast is added.
interface X
interface Z
@@ -1,62 +0,0 @@
@kotlin.Metadata
public interface A {
// source: 'nonApproxToValidSupertype2.kt'
}
@kotlin.Metadata
public interface B {
// source: 'nonApproxToValidSupertype2.kt'
}
@kotlin.Metadata
public final class G {
// source: 'nonApproxToValidSupertype2.kt'
public method <init>(): void
public final method check(@org.jetbrains.annotations.NotNull p0: IFoo): void
}
@kotlin.Metadata
public interface IFoo {
// source: 'nonApproxToValidSupertype2.kt'
public abstract method accept(@org.jetbrains.annotations.NotNull p0: U): void
}
@kotlin.Metadata
final class NonApproxToValidSupertype2Kt$test$1 {
// source: 'nonApproxToValidSupertype2.kt'
enclosing method NonApproxToValidSupertype2Kt.test()V
public final static field INSTANCE: NonApproxToValidSupertype2Kt$test$1
inner (anonymous) class NonApproxToValidSupertype2Kt$test$1
static method <clinit>(): void
method <init>(): void
public synthetic bridge method accept(p0: U): void
public final method accept(p0: X): void
}
@kotlin.Metadata
public final class NonApproxToValidSupertype2Kt {
// source: 'nonApproxToValidSupertype2.kt'
inner (anonymous) class NonApproxToValidSupertype2Kt$test$1
public final static method sel(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public final static method test(): void
}
@kotlin.Metadata
public interface U {
// source: 'nonApproxToValidSupertype2.kt'
}
@kotlin.Metadata
public interface W {
// source: 'nonApproxToValidSupertype2.kt'
}
@kotlin.Metadata
public interface X {
// source: 'nonApproxToValidSupertype2.kt'
}
@kotlin.Metadata
public interface Z {
// source: 'nonApproxToValidSupertype2.kt'
}
@@ -1,6 +1,3 @@
// K1 generates `accept(Object)` and bridge `accept(U)` in the SAM adapter.
// K2 generates `accept(X)` and bridge `accept(U)`. It is fine though, because if `check`'s parameter is passed where Z or W is expected, checkcast is added.
interface X: U, W
interface Z: U, W