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:
+22
@@ -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);
|
||||
}
|
||||
+24
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user