JVM_IR: write raw types as raw in JVM generic signatures
This commit is contained in:
+5
-2
@@ -17,7 +17,10 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapperBase
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
|
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
|
||||||
@@ -181,7 +184,7 @@ class IrTypeMapper(private val context: JvmBackendContext) : KotlinTypeMapperBas
|
|||||||
|
|
||||||
// Copied from KotlinTypeMapper.writeGenericType.
|
// Copied from KotlinTypeMapper.writeGenericType.
|
||||||
private fun JvmSignatureWriter.writeGenericType(type: IrSimpleType, asmType: Type, mode: TypeMappingMode) {
|
private fun JvmSignatureWriter.writeGenericType(type: IrSimpleType, asmType: Type, mode: TypeMappingMode) {
|
||||||
if (skipGenericSignature() || hasNothingInNonContravariantPosition(type) || type.arguments.isEmpty()) {
|
if (skipGenericSignature() || hasNothingInNonContravariantPosition(type) || type.arguments.isEmpty() || type.isRawType()) {
|
||||||
writeAsmType(asmType)
|
writeAsmType(asmType)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.backend.common.ir.allOverridden
|
import org.jetbrains.kotlin.backend.common.ir.allOverridden
|
||||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
|
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry
|
import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
||||||
@@ -437,3 +438,6 @@ val IrDeclaration.psiElement: PsiElement?
|
|||||||
|
|
||||||
val IrMemberAccessExpression<*>.psiElement: PsiElement?
|
val IrMemberAccessExpression<*>.psiElement: PsiElement?
|
||||||
get() = (symbol.descriptor.original as? DeclarationDescriptorWithSource)?.psiElement
|
get() = (symbol.descriptor.original as? DeclarationDescriptorWithSource)?.psiElement
|
||||||
|
|
||||||
|
fun IrSimpleType.isRawType() =
|
||||||
|
hasAnnotation(JvmGeneratorExtensions.RAW_TYPE_ANNOTATION_FQ_NAME)
|
||||||
@@ -11,17 +11,17 @@ fun testReturnsRawGenericIn(j: JRaw) = j.returnsRawGenericIn()
|
|||||||
|
|
||||||
fun testReturnsRawGenericOut(j: JRaw) = j.returnsRawGenericOut()
|
fun testReturnsRawGenericOut(j: JRaw) = j.returnsRawGenericOut()
|
||||||
|
|
||||||
|
fun testBothRawAndGeneric(j: JRaw, list: List<Any?>) = j.returnsRawList()
|
||||||
|
|
||||||
class KRaw(j: JRaw) : JRaw by j
|
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
|
// FILE: JRaw.java
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public interface JRaw {
|
public interface JRaw {
|
||||||
void takesRawList(List list);
|
void takesRawList(List list);
|
||||||
List returnsRawList();
|
List returnsRawList();
|
||||||
|
List bothRawAndGeneric(List<Object> list1, List list2);
|
||||||
void takesRawGenericInv(GenericInv g);
|
void takesRawGenericInv(GenericInv g);
|
||||||
GenericInv returnsRawGenericInv();
|
GenericInv returnsRawGenericInv();
|
||||||
void takesRawGenericIn(GenericIn g);
|
void takesRawGenericIn(GenericIn g);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public final class<null> KRaw {
|
|||||||
public <(LGenericInv<Ljava/lang/Number;>;)V> method takesRawGenericInv(p0: GenericInv): void
|
public <(LGenericInv<Ljava/lang/Number;>;)V> method takesRawGenericInv(p0: GenericInv): void
|
||||||
public <(LGenericOut<+Ljava/lang/Number;>;)V> method takesRawGenericOut(p0: GenericOut): 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 <(Ljava/util/List<Ljava/lang/Object;>;)V> method takesRawList(p0: java.util.List): void
|
||||||
|
public <(Ljava/util/List<Ljava/lang/Object;>;Ljava/util/List<Ljava/lang/Object;>;)Ljava/util/List<Ljava/lang/Object;>;> 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 <init>(@org.jetbrains.annotations.NotNull p0: JRaw): void
|
||||||
private synthetic final field <null> $$delegate_0: JRaw
|
private synthetic final field <null> $$delegate_0: JRaw
|
||||||
}
|
}
|
||||||
@@ -37,4 +38,5 @@ public final class<null> RawTypeInSignatureKt {
|
|||||||
public final static <(LJRaw;)LGenericIn<Ljava/lang/Number;>;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
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;)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
|
public final static <(LJRaw;)LGenericOut<Ljava/lang/Number;>;> method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut
|
||||||
|
public final static <(LJRaw;Ljava/util/List<+Ljava/lang/Object;>;)Ljava/util/List<Ljava/lang/Object;>;> method testBothRawAndGeneric(@org.jetbrains.annotations.NotNull p0: JRaw, @org.jetbrains.annotations.NotNull p1: java.util.List): java.util.List
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,22 +19,24 @@ public final class<<T:Ljava/lang/Number;>Ljava/lang/Object;> GenericOut {
|
|||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class<null> KRaw {
|
public final class<null> KRaw {
|
||||||
// source: 'rawTypeInSignature.kt'
|
// source: 'rawTypeInSignature.kt'
|
||||||
public <()LGenericIn<Ljava/lang/Number;>;> method returnsRawGenericIn(): GenericIn
|
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 <()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
|
public <null> method <init>(@org.jetbrains.annotations.NotNull p0: JRaw): void
|
||||||
|
public <null> method returnsRawGenericIn(): GenericIn
|
||||||
|
public <null> method returnsRawGenericInv(): GenericInv
|
||||||
|
public <null> method returnsRawGenericOut(): GenericOut
|
||||||
|
public <null> method returnsRawList(): java.util.List
|
||||||
|
public <null> method takesRawGenericIn(p0: GenericIn): void
|
||||||
|
public <null> method takesRawGenericInv(p0: GenericInv): void
|
||||||
|
public <null> method takesRawGenericOut(p0: GenericOut): void
|
||||||
|
public <null> method takesRawList(p0: java.util.List): void
|
||||||
private synthetic final field <null> $$delegate_0: JRaw
|
private synthetic final field <null> $$delegate_0: JRaw
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class<null> RawTypeInSignatureKt {
|
public final class<null> RawTypeInSignatureKt {
|
||||||
// source: 'rawTypeInSignature.kt'
|
// source: 'rawTypeInSignature.kt'
|
||||||
public final static <(LJRaw;)LGenericIn<Ljava/lang/Number;>;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
public final static <(LJRaw;Ljava/util/List<+Ljava/lang/Object;>;)Ljava/util/List;> method testBothRawAndGeneric(@org.jetbrains.annotations.NotNull p0: JRaw, @org.jetbrains.annotations.NotNull p1: java.util.List): java.util.List
|
||||||
public final static <(LJRaw;)LGenericInv<Ljava/lang/Number;>;> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv
|
public final static <null> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
||||||
public final static <(LJRaw;)LGenericOut<Ljava/lang/Number;>;> method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut
|
public final static <null> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv
|
||||||
|
public final static <null> method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user