diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt index b0a1dc9e1aa..266f6d57bca 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt @@ -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 } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt index 4128671f9fc..50dbdde157b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/irCodegenUtils.kt @@ -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) \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt index e518f0f8cd5..26f3fca21e1 100644 --- a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt +++ b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt @@ -11,17 +11,17 @@ fun testReturnsRawGenericIn(j: JRaw) = j.returnsRawGenericIn() fun testReturnsRawGenericOut(j: JRaw) = j.returnsRawGenericOut() +fun testBothRawAndGeneric(j: JRaw, list: List) = j.returnsRawList() + class KRaw(j: JRaw) : JRaw by j -// JVM: public <(Ljava/util/List;)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 list1, List list2); void takesRawGenericInv(GenericInv g); GenericInv returnsRawGenericInv(); void takesRawGenericIn(GenericIn g); diff --git a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.txt b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.txt index 9668b887eaf..d789d39b7f9 100644 --- a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.txt +++ b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature.txt @@ -27,6 +27,7 @@ public final class KRaw { public <(LGenericInv;)V> method takesRawGenericInv(p0: GenericInv): void public <(LGenericOut<+Ljava/lang/Number;>;)V> method takesRawGenericOut(p0: GenericOut): void public <(Ljava/util/List;)V> method takesRawList(p0: java.util.List): void + public <(Ljava/util/List;Ljava/util/List;)Ljava/util/List;> method bothRawAndGeneric(p0: java.util.List, p1: java.util.List): java.util.List public method (@org.jetbrains.annotations.NotNull p0: JRaw): void private synthetic final field $$delegate_0: JRaw } @@ -37,4 +38,5 @@ public final class RawTypeInSignatureKt { public final static <(LJRaw;)LGenericIn;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn public final static <(LJRaw;)LGenericInv;> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv public final static <(LJRaw;)LGenericOut;> 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 } diff --git a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature_ir.txt b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature_ir.txt index 8e51f05b1be..ba1122afe9e 100644 --- a/compiler/testData/codegen/bytecodeListing/rawTypeInSignature_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/rawTypeInSignature_ir.txt @@ -19,22 +19,24 @@ public final class<Ljava/lang/Object;> GenericOut { @kotlin.Metadata public final class KRaw { // source: 'rawTypeInSignature.kt' - public <()LGenericIn;> method returnsRawGenericIn(): GenericIn - public <()LGenericInv;> method returnsRawGenericInv(): GenericInv - public <()LGenericOut;> method returnsRawGenericOut(): GenericOut - public <()Ljava/util/List;> method returnsRawList(): java.util.List - public <(LGenericIn<-Ljava/lang/Number;>;)V> method takesRawGenericIn(p0: GenericIn): void - public <(LGenericInv;)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 method (@org.jetbrains.annotations.NotNull p0: JRaw): void + public method returnsRawGenericIn(): GenericIn + public method returnsRawGenericInv(): GenericInv + public method returnsRawGenericOut(): GenericOut + public method returnsRawList(): java.util.List + public method takesRawGenericIn(p0: GenericIn): void + public method takesRawGenericInv(p0: GenericInv): void + public method takesRawGenericOut(p0: GenericOut): void + public method takesRawList(p0: java.util.List): void private synthetic final field $$delegate_0: JRaw } @kotlin.Metadata public final class RawTypeInSignatureKt { // source: 'rawTypeInSignature.kt' - public final static <(LJRaw;)LGenericIn;> method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn - public final static <(LJRaw;)LGenericInv;> method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv - public final static <(LJRaw;)LGenericOut;> 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 method testReturnsRawGenericIn(@org.jetbrains.annotations.NotNull p0: JRaw): GenericIn + public final static method testReturnsRawGenericInv(@org.jetbrains.annotations.NotNull p0: JRaw): GenericInv + public final static method testReturnsRawGenericOut(@org.jetbrains.annotations.NotNull p0: JRaw): GenericOut }