JVM_IR fix Java wildcard types translation

Types such as 'Collection<? extends CharSequence>' are treated as
'(kotlin.collections.MutableCollection<out kotlin.CharSequence!>
  ..kotlin.collections.Collection<kotlin.CharSequence!>?)'
by the front-end.
When generating generic signatures, JVM BE takes lower bound (which is
'kotlin.collections.MutableCollection<out kotlin.CharSequence!>').
Emulate this behavior in TypeTranslator.
This commit is contained in:
Dmitry Petrov
2020-10-19 17:28:37 +03:00
parent 19ed04e3fe
commit 47c784f023
16 changed files with 283 additions and 47 deletions
@@ -0,0 +1,22 @@
// FILE: delegationToJavaInterfaceWithWildcardType.kt
// WITH_SIGNATURES
interface K {
fun kf1(): Collection<out CharSequence>
fun kf2(): Collection<CharSequence>
fun kg1(c: Collection<out CharSequence>)
fun kg2(c: Collection<CharSequence>)
}
class C(j: J, k: K) : J by j, K by k
// FILE: J.java
import java.util.*;
public interface J {
Collection<? extends CharSequence> jf1();
Collection<CharSequence> jf2();
void jg1(Collection<? extends CharSequence> c);
void jg2(Collection<CharSequence> c);
}
@@ -0,0 +1,24 @@
@kotlin.Metadata
public final class<null> C {
// source: 'delegationToJavaInterfaceWithWildcardType.kt'
public <()Ljava/util/Collection<+Ljava/lang/CharSequence;>;> method jf1(): java.util.Collection
public <()Ljava/util/Collection<Ljava/lang/CharSequence;>;> method jf2(): java.util.Collection
public @org.jetbrains.annotations.NotNull <()Ljava/util/Collection<Ljava/lang/CharSequence;>;> method kf1(): java.util.Collection
public @org.jetbrains.annotations.NotNull <()Ljava/util/Collection<Ljava/lang/CharSequence;>;> method kf2(): java.util.Collection
public <(Ljava/util/Collection<+Ljava/lang/CharSequence;>;)V> method jg1(p0: java.util.Collection): void
public <(Ljava/util/Collection<+Ljava/lang/CharSequence;>;)V> method kg1(@org.jetbrains.annotations.NotNull p0: java.util.Collection): void
public <(Ljava/util/Collection<+Ljava/lang/CharSequence;>;)V> method kg2(@org.jetbrains.annotations.NotNull p0: java.util.Collection): void
public <(Ljava/util/Collection<Ljava/lang/CharSequence;>;)V> method jg2(p0: java.util.Collection): void
public <null> method <init>(@org.jetbrains.annotations.NotNull p0: J, @org.jetbrains.annotations.NotNull p1: K): void
private synthetic final field <null> $$delegate_0: J
private synthetic final field <null> $$delegate_1: K
}
@kotlin.Metadata
public interface<null> K {
// source: 'delegationToJavaInterfaceWithWildcardType.kt'
public abstract @org.jetbrains.annotations.NotNull <()Ljava/util/Collection<Ljava/lang/CharSequence;>;> method kf1(): java.util.Collection
public abstract @org.jetbrains.annotations.NotNull <()Ljava/util/Collection<Ljava/lang/CharSequence;>;> method kf2(): java.util.Collection
public abstract <(Ljava/util/Collection<+Ljava/lang/CharSequence;>;)V> method kg1(@org.jetbrains.annotations.NotNull p0: java.util.Collection): void
public abstract <(Ljava/util/Collection<+Ljava/lang/CharSequence;>;)V> method kg2(@org.jetbrains.annotations.NotNull p0: java.util.Collection): void
}
@@ -19,7 +19,7 @@ public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericOut {
@kotlin.Metadata
public final class<null> KRaw {
// source: 'rawTypeInSignature.kt'
public <(Ljava/util/List<+Ljava/lang/Object;>;Ljava/util/List;)Ljava/util/List;> method bothRawAndGeneric(p0: java.util.List, p1: java.util.List): java.util.List
public <(Ljava/util/List<Ljava/lang/Object;>;Ljava/util/List;)Ljava/util/List;> method bothRawAndGeneric(p0: java.util.List, p1: java.util.List): java.util.List
public <null> method <init>(@org.jetbrains.annotations.NotNull p0: JRaw): void
public <null> method returnsRawGenericIn(): GenericIn
public <null> method returnsRawGenericInv(): GenericInv