diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/Fir2IrJvmSpecialAnnotationSymbolProvider.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/Fir2IrJvmSpecialAnnotationSymbolProvider.kt index 84d60d1546c..3058a0ef9bf 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/Fir2IrJvmSpecialAnnotationSymbolProvider.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/Fir2IrJvmSpecialAnnotationSymbolProvider.kt @@ -40,6 +40,7 @@ class Fir2IrJvmSpecialAnnotationSymbolProvider : Fir2IrSpecialSymbolProvider() { when (id) { ENHANCED_NULLABILITY_ID -> id.toIrClass(kotlinJvmInternalPackage).symbol FLEXIBLE_NULLABILITY_ID -> id.toIrClass(kotlinInternalIrPackage).symbol + RAW_TYPE_ANNOTATION_ID -> id.toIrClass(kotlinInternalIrPackage).symbol else -> null } @@ -59,5 +60,7 @@ class Fir2IrJvmSpecialAnnotationSymbolProvider : Fir2IrSpecialSymbolProvider() { private val ENHANCED_NULLABILITY_ID = ClassId.topLevel(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION) private val FLEXIBLE_NULLABILITY_ID = ClassId.topLevel(IrBuiltIns.KOTLIN_INTERNAL_IR_FQN.child(Name.identifier("FlexibleNullability"))) + private val RAW_TYPE_ANNOTATION_ID = + ClassId.topLevel(IrBuiltIns.KOTLIN_INTERNAL_IR_FQN.child(Name.identifier("RawType"))) } } \ No newline at end of file diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt index e9f7669eb2a..889cfebedf6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt @@ -44,6 +44,13 @@ class Fir2IrBuiltIns( internal fun extensionFunctionTypeAnnotationConstructorCall(): IrConstructorCall? = extensionFunctionTypeAnnotationSymbol?.toConstructorCall() + private val rawTypeAnnotationSymbol by lazy { + annotationSymbolById(StandardClassIds.Annotations.RawTypeAnnotation) + } + + internal fun rawTypeAnnotationConstructorCall(): IrConstructorCall? = + rawTypeAnnotationSymbol?.toConstructorCall() + private fun annotationSymbolById(id: ClassId): IrClassSymbol? = provider?.getClassSymbolById(id) ?: session.symbolProvider.getClassLikeSymbolByClassId(id)?.toSymbol( session, classifierStorage, ConversionTypeContext.DEFAULT diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt index a9f0b0355bb..a5fc3411705 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.name.StandardClassIds.Annotations.ExtensionFunctionType import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.Variance @@ -100,7 +101,8 @@ class Fir2IrTypeConverter( fun ConeKotlinType.toIrType( typeContext: ConversionTypeContext = ConversionTypeContext.DEFAULT, annotations: List = emptyList(), - hasFlexibleNullability: Boolean = false + hasFlexibleNullability: Boolean = false, + addRawTypeAnnotation: Boolean = false ): IrType { return when (this) { is ConeKotlinErrorType -> createErrorType() @@ -122,13 +124,6 @@ class Fir2IrTypeConverter( typeAnnotations += it } } - isExtensionFunctionType -> { - if (annotations.getAnnotationsByClassId(StandardClassIds.Annotations.ExtensionFunctionType).isEmpty()) { - builtIns.extensionFunctionTypeAnnotationConstructorCall()?.let { - typeAnnotations += it - } - } - } hasFlexibleNullability -> { builtIns.flexibleNullabilityAnnotationConstructorCall()?.let { typeAnnotations += it @@ -136,6 +131,18 @@ class Fir2IrTypeConverter( } } + if (isExtensionFunctionType && annotations.getAnnotationsByClassId(ExtensionFunctionType).isEmpty()) { + builtIns.extensionFunctionTypeAnnotationConstructorCall()?.let { + typeAnnotations += it + } + } + + if (addRawTypeAnnotation) { + builtIns.rawTypeAnnotationConstructorCall()?.let { + typeAnnotations += it + } + } + for (attributeAnnotation in attributes.customAnnotations) { if (annotations.any { it.classId == attributeAnnotation.classId }) continue typeAnnotations += callGenerator.convertToIrConstructorCall(attributeAnnotation) as? IrConstructorCall ?: continue @@ -143,9 +150,19 @@ class Fir2IrTypeConverter( val expandedType = fullyExpandedType(session) val approximatedType = approximateType(expandedType) IrSimpleTypeImpl( - irSymbol, !typeContext.definitelyNotNull && approximatedType.isMarkedNullable, - approximatedType.typeArguments.map { it.toIrTypeArgument(typeContext) }, - typeAnnotations + irSymbol, + hasQuestionMark = !typeContext.definitelyNotNull && approximatedType.isMarkedNullable, + arguments = approximatedType.typeArguments.map { it.toIrTypeArgument(typeContext) }, + annotations = typeAnnotations + ) + } + is ConeRawType -> { + // Upper bound has star projections here, so we take lower one + // (some reflection tests rely on this) + lowerBound.toIrType( + typeContext, + hasFlexibleNullability = lowerBound.nullability != upperBound.nullability, + addRawTypeAnnotation = true ) } is ConeFlexibleType -> { diff --git a/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_after.kt b/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_after.kt index d1077fcb98e..527c3400958 100644 --- a/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_after.kt +++ b/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_after.kt @@ -1,7 +1,4 @@ // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: Expected (Kotlin reflection is not available)>, -// actual (Kotlin reflection is not available)> // WITH_STDLIB // FILE: box.kt diff --git a/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_before.kt b/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_before.kt index 30ddee71549..96403d9a261 100644 --- a/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_before.kt +++ b/compiler/testData/codegen/box/reflection/typeOf/noReflect/rawTypes_before.kt @@ -1,9 +1,6 @@ // !API_VERSION: 1.5 // !OPT_IN: kotlin.ExperimentalStdlibApi // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: Expected (Kotlin reflection is not available)>, -// actual (Kotlin reflection is not available)> // WITH_STDLIB // FILE: box.kt diff --git a/compiler/testData/codegen/box/reflection/typeOf/rawTypes_after.kt b/compiler/testData/codegen/box/reflection/typeOf/rawTypes_after.kt index 5c99e4e2d17..962dd66f84e 100644 --- a/compiler/testData/codegen/box/reflection/typeOf/rawTypes_after.kt +++ b/compiler/testData/codegen/box/reflection/typeOf/rawTypes_after.kt @@ -1,6 +1,6 @@ // TARGET_BACKEND: JVM // IGNORE_BACKEND_FIR: JVM_IR -// FIR status: Fail 1: test.C<*, *> +// FIR status: Fail 3: (kotlin.collections.MutableList..kotlin.collections.MutableList<*>?) // WITH_REFLECT // FILE: box.kt diff --git a/compiler/testData/codegen/box/reflection/typeOf/rawTypes_before.kt b/compiler/testData/codegen/box/reflection/typeOf/rawTypes_before.kt index 1bcb9ec73b5..0face94b856 100644 --- a/compiler/testData/codegen/box/reflection/typeOf/rawTypes_before.kt +++ b/compiler/testData/codegen/box/reflection/typeOf/rawTypes_before.kt @@ -1,8 +1,6 @@ // !API_VERSION: 1.5 // !OPT_IN: kotlin.ExperimentalStdlibApi // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: Fail 1: test.C<*, *> // WITH_REFLECT // FILE: box.kt diff --git a/compiler/testData/ir/irText/types/rawTypeInSignature.fir.ir.txt b/compiler/testData/ir/irText/types/rawTypeInSignature.fir.ir.txt index 1bfdf37bd03..1fc940c9eed 100644 --- a/compiler/testData/ir/irText/types/rawTypeInSignature.fir.ir.txt +++ b/compiler/testData/ir/irText/types/rawTypeInSignature.fir.ir.txt @@ -59,23 +59,23 @@ FILE fqName: fileName:/rawTypeInSignature.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any - FUN name:testReturnsRawGenericInv visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] .GenericInv<*>? + FUN name:testReturnsRawGenericInv visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] @[RawType] .GenericInv VALUE_PARAMETER name:j index:0 type:.JRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericInv (j: .JRaw): @[FlexibleNullability] .GenericInv<*>? declared in ' - CALL 'public abstract fun returnsRawGenericInv (): @[FlexibleNullability] .GenericInv<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericInv<*>? origin=null + RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericInv (j: .JRaw): @[FlexibleNullability] @[RawType] .GenericInv declared in ' + CALL 'public abstract fun returnsRawGenericInv (): @[FlexibleNullability] @[RawType] .GenericInv declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericInv origin=null $this: GET_VAR 'j: .JRaw declared in .testReturnsRawGenericInv' type=.JRaw origin=null - FUN name:testReturnsRawGenericIn visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] .GenericIn<*>? + FUN name:testReturnsRawGenericIn visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] @[RawType] .GenericIn VALUE_PARAMETER name:j index:0 type:.JRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericIn (j: .JRaw): @[FlexibleNullability] .GenericIn<*>? declared in ' - CALL 'public abstract fun returnsRawGenericIn (): @[FlexibleNullability] .GenericIn<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericIn<*>? origin=null + RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericIn (j: .JRaw): @[FlexibleNullability] @[RawType] .GenericIn declared in ' + CALL 'public abstract fun returnsRawGenericIn (): @[FlexibleNullability] @[RawType] .GenericIn declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericIn origin=null $this: GET_VAR 'j: .JRaw declared in .testReturnsRawGenericIn' type=.JRaw origin=null - FUN name:testReturnsRawGenericOut visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] .GenericOut<*>? + FUN name:testReturnsRawGenericOut visibility:public modality:FINAL <> (j:.JRaw) returnType:@[FlexibleNullability] @[RawType] .GenericOut VALUE_PARAMETER name:j index:0 type:.JRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericOut (j: .JRaw): @[FlexibleNullability] .GenericOut<*>? declared in ' - CALL 'public abstract fun returnsRawGenericOut (): @[FlexibleNullability] .GenericOut<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericOut<*>? origin=null + RETURN type=kotlin.Nothing from='public final fun testReturnsRawGenericOut (j: .JRaw): @[FlexibleNullability] @[RawType] .GenericOut declared in ' + CALL 'public abstract fun returnsRawGenericOut (): @[FlexibleNullability] @[RawType] .GenericOut declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericOut origin=null $this: GET_VAR 'j: .JRaw declared in .testReturnsRawGenericOut' type=.JRaw origin=null CLASS CLASS name:KRaw modality:FINAL visibility:public superTypes:[.JRaw] $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.KRaw @@ -84,82 +84,86 @@ FILE fqName: fileName:/rawTypeInSignature.kt BLOCK_BODY DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:KRaw modality:FINAL visibility:public superTypes:[.JRaw]' - FUN DELEGATED_MEMBER name:takesRawList visibility:public modality:OPEN <> ($this:.KRaw, list:@[FlexibleNullability] kotlin.collections.List<*>?) returnType:kotlin.Unit + FUN DELEGATED_MEMBER name:takesRawList visibility:public modality:OPEN <> ($this:.KRaw, list:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList) returnType:kotlin.Unit overridden: - public abstract fun takesRawList (list: @[FlexibleNullability] kotlin.collections.List<*>?): kotlin.Unit declared in .JRaw + public abstract fun takesRawList (list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList): kotlin.Unit declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw - VALUE_PARAMETER name:list index:0 type:@[FlexibleNullability] kotlin.collections.List<*>? + VALUE_PARAMETER name:list index:0 type:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList BLOCK_BODY - CALL 'public abstract fun takesRawList (list: @[FlexibleNullability] kotlin.collections.List<*>?): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null + CALL 'public abstract fun takesRawList (list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null receiver: GET_VAR ': .KRaw declared in .KRaw.takesRawList' type=.KRaw origin=null - list: GET_VAR 'list: @[FlexibleNullability] kotlin.collections.List<*>? declared in .KRaw.takesRawList' type=@[FlexibleNullability] kotlin.collections.List<*>? origin=null - FUN DELEGATED_MEMBER name:returnsRawList visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] kotlin.collections.List<*>? + list: GET_VAR 'list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList declared in .KRaw.takesRawList' type=@[FlexibleNullability] @[RawType] kotlin.collections.MutableList origin=null + FUN DELEGATED_MEMBER name:returnsRawList visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList overridden: - public abstract fun returnsRawList (): @[FlexibleNullability] kotlin.collections.List<*>? declared in .JRaw + public abstract fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public open fun returnsRawList (): @[FlexibleNullability] kotlin.collections.List<*>? declared in .KRaw' - CALL 'public abstract fun returnsRawList (): @[FlexibleNullability] kotlin.collections.List<*>? declared in .JRaw' type=@[FlexibleNullability] kotlin.collections.List<*>? origin=null - $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null - receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawList' type=.KRaw origin=null - FUN DELEGATED_MEMBER name:takesRawGenericInv visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] .GenericInv<*>?) returnType:kotlin.Unit + RETURN type=kotlin.Nothing from='public open fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList declared in .KRaw' + TYPE_OP type=@[RawType] kotlin.collections.MutableList origin=IMPLICIT_NOTNULL typeOperand=@[RawType] kotlin.collections.MutableList + CALL 'public abstract fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList declared in .JRaw' type=@[FlexibleNullability] @[RawType] kotlin.collections.MutableList origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null + receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawList' type=.KRaw origin=null + FUN DELEGATED_MEMBER name:takesRawGenericInv visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] @[RawType] .GenericInv) returnType:kotlin.Unit overridden: - public abstract fun takesRawGenericInv (g: @[FlexibleNullability] .GenericInv<*>?): kotlin.Unit declared in .JRaw + public abstract fun takesRawGenericInv (g: @[FlexibleNullability] @[RawType] .GenericInv): kotlin.Unit declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw - VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] .GenericInv<*>? + VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] @[RawType] .GenericInv BLOCK_BODY - CALL 'public abstract fun takesRawGenericInv (g: @[FlexibleNullability] .GenericInv<*>?): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null + CALL 'public abstract fun takesRawGenericInv (g: @[FlexibleNullability] @[RawType] .GenericInv): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null receiver: GET_VAR ': .KRaw declared in .KRaw.takesRawGenericInv' type=.KRaw origin=null - g: GET_VAR 'g: @[FlexibleNullability] .GenericInv<*>? declared in .KRaw.takesRawGenericInv' type=@[FlexibleNullability] .GenericInv<*>? origin=null - FUN DELEGATED_MEMBER name:returnsRawGenericInv visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] .GenericInv<*>? + g: GET_VAR 'g: @[FlexibleNullability] @[RawType] .GenericInv declared in .KRaw.takesRawGenericInv' type=@[FlexibleNullability] @[RawType] .GenericInv origin=null + FUN DELEGATED_MEMBER name:returnsRawGenericInv visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] @[RawType] .GenericInv overridden: - public abstract fun returnsRawGenericInv (): @[FlexibleNullability] .GenericInv<*>? declared in .JRaw + public abstract fun returnsRawGenericInv (): @[FlexibleNullability] @[RawType] .GenericInv declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public open fun returnsRawGenericInv (): @[FlexibleNullability] .GenericInv<*>? declared in .KRaw' - CALL 'public abstract fun returnsRawGenericInv (): @[FlexibleNullability] .GenericInv<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericInv<*>? origin=null - $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null - receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericInv' type=.KRaw origin=null - FUN DELEGATED_MEMBER name:takesRawGenericIn visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] .GenericIn<*>?) returnType:kotlin.Unit + RETURN type=kotlin.Nothing from='public open fun returnsRawGenericInv (): @[FlexibleNullability] @[RawType] .GenericInv declared in .KRaw' + TYPE_OP type=@[RawType] .GenericInv origin=IMPLICIT_NOTNULL typeOperand=@[RawType] .GenericInv + CALL 'public abstract fun returnsRawGenericInv (): @[FlexibleNullability] @[RawType] .GenericInv declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericInv origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null + receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericInv' type=.KRaw origin=null + FUN DELEGATED_MEMBER name:takesRawGenericIn visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] @[RawType] .GenericIn) returnType:kotlin.Unit overridden: - public abstract fun takesRawGenericIn (g: @[FlexibleNullability] .GenericIn<*>?): kotlin.Unit declared in .JRaw + public abstract fun takesRawGenericIn (g: @[FlexibleNullability] @[RawType] .GenericIn): kotlin.Unit declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw - VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] .GenericIn<*>? + VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] @[RawType] .GenericIn BLOCK_BODY - CALL 'public abstract fun takesRawGenericIn (g: @[FlexibleNullability] .GenericIn<*>?): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null + CALL 'public abstract fun takesRawGenericIn (g: @[FlexibleNullability] @[RawType] .GenericIn): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null receiver: GET_VAR ': .KRaw declared in .KRaw.takesRawGenericIn' type=.KRaw origin=null - g: GET_VAR 'g: @[FlexibleNullability] .GenericIn<*>? declared in .KRaw.takesRawGenericIn' type=@[FlexibleNullability] .GenericIn<*>? origin=null - FUN DELEGATED_MEMBER name:returnsRawGenericIn visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] .GenericIn<*>? + g: GET_VAR 'g: @[FlexibleNullability] @[RawType] .GenericIn declared in .KRaw.takesRawGenericIn' type=@[FlexibleNullability] @[RawType] .GenericIn origin=null + FUN DELEGATED_MEMBER name:returnsRawGenericIn visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] @[RawType] .GenericIn overridden: - public abstract fun returnsRawGenericIn (): @[FlexibleNullability] .GenericIn<*>? declared in .JRaw + public abstract fun returnsRawGenericIn (): @[FlexibleNullability] @[RawType] .GenericIn declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public open fun returnsRawGenericIn (): @[FlexibleNullability] .GenericIn<*>? declared in .KRaw' - CALL 'public abstract fun returnsRawGenericIn (): @[FlexibleNullability] .GenericIn<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericIn<*>? origin=null - $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null - receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericIn' type=.KRaw origin=null - FUN DELEGATED_MEMBER name:takesRawGenericOut visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] .GenericOut<*>?) returnType:kotlin.Unit + RETURN type=kotlin.Nothing from='public open fun returnsRawGenericIn (): @[FlexibleNullability] @[RawType] .GenericIn declared in .KRaw' + TYPE_OP type=@[RawType] .GenericIn origin=IMPLICIT_NOTNULL typeOperand=@[RawType] .GenericIn + CALL 'public abstract fun returnsRawGenericIn (): @[FlexibleNullability] @[RawType] .GenericIn declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericIn origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null + receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericIn' type=.KRaw origin=null + FUN DELEGATED_MEMBER name:takesRawGenericOut visibility:public modality:OPEN <> ($this:.KRaw, g:@[FlexibleNullability] @[RawType] .GenericOut) returnType:kotlin.Unit overridden: - public abstract fun takesRawGenericOut (g: @[FlexibleNullability] .GenericOut<*>?): kotlin.Unit declared in .JRaw + public abstract fun takesRawGenericOut (g: @[FlexibleNullability] @[RawType] .GenericOut): kotlin.Unit declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw - VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] .GenericOut<*>? + VALUE_PARAMETER name:g index:0 type:@[FlexibleNullability] @[RawType] .GenericOut BLOCK_BODY - CALL 'public abstract fun takesRawGenericOut (g: @[FlexibleNullability] .GenericOut<*>?): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null + CALL 'public abstract fun takesRawGenericOut (g: @[FlexibleNullability] @[RawType] .GenericOut): kotlin.Unit declared in .JRaw' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null receiver: GET_VAR ': .KRaw declared in .KRaw.takesRawGenericOut' type=.KRaw origin=null - g: GET_VAR 'g: @[FlexibleNullability] .GenericOut<*>? declared in .KRaw.takesRawGenericOut' type=@[FlexibleNullability] .GenericOut<*>? origin=null - FUN DELEGATED_MEMBER name:returnsRawGenericOut visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] .GenericOut<*>? + g: GET_VAR 'g: @[FlexibleNullability] @[RawType] .GenericOut declared in .KRaw.takesRawGenericOut' type=@[FlexibleNullability] @[RawType] .GenericOut origin=null + FUN DELEGATED_MEMBER name:returnsRawGenericOut visibility:public modality:OPEN <> ($this:.KRaw) returnType:@[FlexibleNullability] @[RawType] .GenericOut overridden: - public abstract fun returnsRawGenericOut (): @[FlexibleNullability] .GenericOut<*>? declared in .JRaw + public abstract fun returnsRawGenericOut (): @[FlexibleNullability] @[RawType] .GenericOut declared in .JRaw $this: VALUE_PARAMETER name: type:.KRaw BLOCK_BODY - RETURN type=kotlin.Nothing from='public open fun returnsRawGenericOut (): @[FlexibleNullability] .GenericOut<*>? declared in .KRaw' - CALL 'public abstract fun returnsRawGenericOut (): @[FlexibleNullability] .GenericOut<*>? declared in .JRaw' type=@[FlexibleNullability] .GenericOut<*>? origin=null - $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null - receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericOut' type=.KRaw origin=null + RETURN type=kotlin.Nothing from='public open fun returnsRawGenericOut (): @[FlexibleNullability] @[RawType] .GenericOut declared in .KRaw' + TYPE_OP type=@[RawType] .GenericOut origin=IMPLICIT_NOTNULL typeOperand=@[RawType] .GenericOut + CALL 'public abstract fun returnsRawGenericOut (): @[FlexibleNullability] @[RawType] .GenericOut declared in .JRaw' type=@[FlexibleNullability] @[RawType] .GenericOut origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final]' type=.JRaw origin=null + receiver: GET_VAR ': .KRaw declared in .KRaw.returnsRawGenericOut' type=.KRaw origin=null FIELD DELEGATE name:<$$delegate_0> type:.JRaw visibility:local [final] EXPRESSION_BODY GET_VAR 'j: .JRaw declared in .KRaw.' type=.JRaw origin=null diff --git a/compiler/testData/ir/irText/types/rawTypeInSignature.fir.kt.txt b/compiler/testData/ir/irText/types/rawTypeInSignature.fir.kt.txt index 55a739af5b4..58b7f95efed 100644 --- a/compiler/testData/ir/irText/types/rawTypeInSignature.fir.kt.txt +++ b/compiler/testData/ir/irText/types/rawTypeInSignature.fir.kt.txt @@ -25,15 +25,15 @@ class GenericOut { } -fun testReturnsRawGenericInv(j: JRaw): @FlexibleNullability GenericInv<*>? { +fun testReturnsRawGenericInv(j: JRaw): @FlexibleNullability @RawType GenericInv { return j.returnsRawGenericInv() } -fun testReturnsRawGenericIn(j: JRaw): @FlexibleNullability GenericIn<*>? { +fun testReturnsRawGenericIn(j: JRaw): @FlexibleNullability @RawType GenericIn { return j.returnsRawGenericIn() } -fun testReturnsRawGenericOut(j: JRaw): @FlexibleNullability GenericOut<*>? { +fun testReturnsRawGenericOut(j: JRaw): @FlexibleNullability @RawType GenericOut { return j.returnsRawGenericOut() } @@ -44,36 +44,36 @@ class KRaw : JRaw { } - override fun takesRawList(list: @FlexibleNullability List<*>?) { + override fun takesRawList(list: @FlexibleNullability @RawType MutableList) { .#<$$delegate_0>.takesRawList(list = list) } - override fun returnsRawList(): @FlexibleNullability List<*>? { - return .#<$$delegate_0>.returnsRawList() + override fun returnsRawList(): @FlexibleNullability @RawType MutableList { + return .#<$$delegate_0>.returnsRawList() /*!! @RawType MutableList */ } - override fun takesRawGenericInv(g: @FlexibleNullability GenericInv<*>?) { + override fun takesRawGenericInv(g: @FlexibleNullability @RawType GenericInv) { .#<$$delegate_0>.takesRawGenericInv(g = g) } - override fun returnsRawGenericInv(): @FlexibleNullability GenericInv<*>? { - return .#<$$delegate_0>.returnsRawGenericInv() + override fun returnsRawGenericInv(): @FlexibleNullability @RawType GenericInv { + return .#<$$delegate_0>.returnsRawGenericInv() /*!! @RawType GenericInv */ } - override fun takesRawGenericIn(g: @FlexibleNullability GenericIn<*>?) { + override fun takesRawGenericIn(g: @FlexibleNullability @RawType GenericIn) { .#<$$delegate_0>.takesRawGenericIn(g = g) } - override fun returnsRawGenericIn(): @FlexibleNullability GenericIn<*>? { - return .#<$$delegate_0>.returnsRawGenericIn() + override fun returnsRawGenericIn(): @FlexibleNullability @RawType GenericIn { + return .#<$$delegate_0>.returnsRawGenericIn() /*!! @RawType GenericIn */ } - override fun takesRawGenericOut(g: @FlexibleNullability GenericOut<*>?) { + override fun takesRawGenericOut(g: @FlexibleNullability @RawType GenericOut) { .#<$$delegate_0>.takesRawGenericOut(g = g) } - override fun returnsRawGenericOut(): @FlexibleNullability GenericOut<*>? { - return .#<$$delegate_0>.returnsRawGenericOut() + override fun returnsRawGenericOut(): @FlexibleNullability @RawType GenericOut { + return .#<$$delegate_0>.returnsRawGenericOut() /*!! @RawType GenericOut */ } local /* final field */ val <$$delegate_0>: JRaw = j diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt index 97846e9a268..6528635d5bc 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt @@ -153,6 +153,7 @@ object StandardClassIds { val JvmDefault = "JvmDefault".jvmId() val JvmRepeatable = "JvmRepeatable".jvmId() + val RawTypeAnnotation = "RawType".internalIrId() val FlexibleNullability = "FlexibleNullability".internalIrId() val EnhancedNullability = "EnhancedNullability".jvmInternalId()