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.ClassifierDescriptor
|
||||
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.types.*
|
||||
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
|
||||
@@ -181,7 +184,7 @@ class IrTypeMapper(private val context: JvmBackendContext) : KotlinTypeMapperBas
|
||||
|
||||
// Copied from KotlinTypeMapper.writeGenericType.
|
||||
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)
|
||||
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.ir2string
|
||||
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.lower.MultifileFacadeFileEntry
|
||||
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
||||
@@ -437,3 +438,6 @@ val IrDeclaration.psiElement: PsiElement?
|
||||
|
||||
val IrMemberAccessExpression<*>.psiElement: 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 testBothRawAndGeneric(j: JRaw, list: List<Any?>) = j.returnsRawList()
|
||||
|
||||
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();
|
||||
List bothRawAndGeneric(List<Object> list1, List list2);
|
||||
void takesRawGenericInv(GenericInv g);
|
||||
GenericInv returnsRawGenericInv();
|
||||
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 <(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;>;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
|
||||
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;)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;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
|
||||
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 <(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
|
||||
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
|
||||
}
|
||||
|
||||
@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
|
||||
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 <null> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn
|
||||
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