Handle java raw types in IR
Raw type Q is represented as a flexible type Q<B1, ... Bn> .. Q<*, ... *> where Bi is a representative upper bound of the corresponding ith type parameter of Q. When mapping generic signature, JVM takes type arguments of lower bound (which is 'Q<B1, ..., Bn>'). There is still some difference in how JVM and JVM_IR handle raw type in signature. It requires additional investigation.
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
// FILE: rawTypeInSignature.kt
|
||||
// WITH_SIGNATURES
|
||||
|
||||
class GenericInv<T : Number>
|
||||
class GenericIn<in T : Number>
|
||||
class GenericOut<out T : Number>
|
||||
|
||||
fun testReturnsRawGenericInv(j: JRaw) = j.returnsRawGenericInv()
|
||||
|
||||
fun testReturnsRawGenericIn(j: JRaw) = j.returnsRawGenericIn()
|
||||
|
||||
fun testReturnsRawGenericOut(j: JRaw) = j.returnsRawGenericOut()
|
||||
|
||||
class KRaw(j: JRaw) : JRaw by j
|
||||
// JVM: public <(Ljava/util/List<Ljava/lang/Object;>;)V> method takesRawList(p0: java.util.List): void
|
||||
// JVM_IR: public <(Ljava/util/List<+Ljava/lang/Object;>;)V> method takesRawList(p0: java.util.List): void
|
||||
|
||||
// FILE: JRaw.java
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public interface JRaw {
|
||||
void takesRawList(List list);
|
||||
List returnsRawList();
|
||||
void takesRawGenericInv(GenericInv g);
|
||||
GenericInv returnsRawGenericInv();
|
||||
void takesRawGenericIn(GenericIn g);
|
||||
GenericIn returnsRawGenericIn();
|
||||
void takesRawGenericOut(GenericOut g);
|
||||
GenericOut returnsRawGenericOut();
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericIn {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericInv {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericOut {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<null> KRaw {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <()LGenericIn<Ljava/lang/Number;>;> method returnsRawGenericIn(): GenericIn
|
||||
public <()LGenericInv<Ljava/lang/Number;>;> method returnsRawGenericInv(): GenericInv
|
||||
public <()LGenericOut<Ljava/lang/Number;>;> method returnsRawGenericOut(): GenericOut
|
||||
public <()Ljava/util/List<Ljava/lang/Object;>;> method returnsRawList(): java.util.List
|
||||
public <(LGenericIn<-Ljava/lang/Number;>;)V> method takesRawGenericIn(p0: GenericIn): void
|
||||
public <(LGenericInv<Ljava/lang/Number;>;)V> method takesRawGenericInv(p0: GenericInv): void
|
||||
public <(LGenericOut<+Ljava/lang/Number;>;)V> method takesRawGenericOut(p0: GenericOut): void
|
||||
public <(Ljava/util/List<Ljava/lang/Object;>;)V> method takesRawList(p0: java.util.List): void
|
||||
public <null> method <init>(@org.jetbrains.annotations.NotNull p0: JRaw): void
|
||||
private synthetic final field <null> $$delegate_0: JRaw
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<null> RawTypeInSignatureKt {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public final static <(LJRaw;)LGenericIn<Ljava/lang/Number;>;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
||||
public final static <(LJRaw;)LGenericInv<Ljava/lang/Number;>;> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv
|
||||
public final static <(LJRaw;)LGenericOut<Ljava/lang/Number;>;> method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericIn {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericInv {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericOut {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <null> method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<null> KRaw {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public <()LGenericIn<Ljava/lang/Number;>;> method returnsRawGenericIn(): GenericIn
|
||||
public <()LGenericInv<Ljava/lang/Number;>;> method returnsRawGenericInv(): GenericInv
|
||||
public <()LGenericOut<Ljava/lang/Number;>;> method returnsRawGenericOut(): GenericOut
|
||||
public <()Ljava/util/List<Ljava/lang/Object;>;> method returnsRawList(): java.util.List
|
||||
public <(LGenericIn<-Ljava/lang/Number;>;)V> method takesRawGenericIn(p0: GenericIn): void
|
||||
public <(LGenericInv<Ljava/lang/Number;>;)V> method takesRawGenericInv(p0: GenericInv): void
|
||||
public <(LGenericOut<+Ljava/lang/Number;>;)V> method takesRawGenericOut(p0: GenericOut): void
|
||||
public <(Ljava/util/List<+Ljava/lang/Object;>;)V> method takesRawList(p0: java.util.List): void
|
||||
public <null> method <init>(@org.jetbrains.annotations.NotNull p0: JRaw): void
|
||||
private synthetic final field <null> $$delegate_0: JRaw
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class<null> RawTypeInSignatureKt {
|
||||
// source: 'rawTypeInSignature.kt'
|
||||
public final static <(LJRaw;)LGenericIn<Ljava/lang/Number;>;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
||||
public final static <(LJRaw;)LGenericInv<Ljava/lang/Number;>;> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv
|
||||
public final static <(LJRaw;)LGenericOut<Ljava/lang/Number;>;> method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut
|
||||
}
|
||||
Reference in New Issue
Block a user