diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index c69d6ad7205..d27bbe23188 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -298,9 +298,9 @@ class Fir2IrDeclarationStorage( } } - private fun T.declareDefaultSetterParameter(type: IrType): T { + private fun T.declareDefaultSetterParameter(type: IrType, firValueParameter: FirValueParameter?): T { valueParameters = listOf( - createDefaultSetterParameter(startOffset, endOffset, type, parent = this) + createDefaultSetterParameter(startOffset, endOffset, type, parent = this, firValueParameter) ) return this } @@ -310,6 +310,7 @@ class Fir2IrDeclarationStorage( endOffset: Int, type: IrType, parent: IrFunction, + firValueParameter: FirValueParameter?, name: Name? = null, isCrossinline: Boolean = false, isNoinline: Boolean = false, @@ -322,6 +323,9 @@ class Fir2IrDeclarationStorage( isHidden = false, isAssignable = false ).apply { this.parent = parent + if (firValueParameter != null) { + annotationGenerator.generate(this, firValueParameter) + } } } @@ -341,8 +345,9 @@ class Fir2IrDeclarationStorage( } val typeContext = if (forSetter) ConversionTypeContext.IN_SETTER else ConversionTypeContext.DEFAULT if (function is FirDefaultPropertySetter) { - val type = function.valueParameters.first().returnTypeRef.toIrType(ConversionTypeContext.IN_SETTER) - declareDefaultSetterParameter(type) + val valueParameter = function.valueParameters.first() + val type = valueParameter.returnTypeRef.toIrType(ConversionTypeContext.IN_SETTER) + declareDefaultSetterParameter(type, valueParameter) } else if (function != null) { val contextReceivers = function.contextReceiversForFunctionOrContainingProperty() @@ -743,7 +748,8 @@ class Fir2IrDeclarationStorage( enterScope(this) if (propertyAccessor == null && isSetter) { declareDefaultSetterParameter( - property.returnTypeRef.toIrType(ConversionTypeContext.IN_SETTER) + property.returnTypeRef.toIrType(ConversionTypeContext.IN_SETTER), + firValueParameter = null ) } bindAndDeclareParameters( @@ -1163,6 +1169,7 @@ class Fir2IrDeclarationStorage( ) ) } + annotationGenerator.generate(this, valueParameter) } } localStorage.putParameter(valueParameter, irParameter) @@ -1673,11 +1680,6 @@ class Fir2IrDeclarationStorage( || origin == IrDeclarationOrigin.FAKE_OVERRIDE ) { annotationGenerator.generate(this, firAnnotationContainer) - if (this is IrFunction && firAnnotationContainer is FirSimpleFunction) { - valueParameters.zip(firAnnotationContainer.valueParameters).forEach { (irParameter, firParameter) -> - annotationGenerator.generate(irParameter, firParameter) - } - } } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index 3e46c7b3de8..c7dc007628f 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -112,7 +112,6 @@ internal class ClassMemberGenerator( val annotationMode = containingClass?.classKind == ClassKind.ANNOTATION_CLASS && irFunction is IrConstructor for ((valueParameter, firValueParameter) in irParameters.zip(firFunction.valueParameters)) { valueParameter.setDefaultValue(firValueParameter, annotationMode) - annotationGenerator.generate(valueParameter, firValueParameter) } annotationGenerator.generate(irFunction, firFunction) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt index 6b61caf9448..553587060ee 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt @@ -94,6 +94,7 @@ class Fir2IrLazyPropertyAccessor( typeConverter, conversionTypeContext ), parent = this@Fir2IrLazyPropertyAccessor, + firValueParameter = valueParameter, name = valueParameter?.name, isCrossinline = valueParameter?.isCrossinline == true, isNoinline = valueParameter?.isNoinline == true diff --git a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.ir.txt b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.ir.txt index 4da0c629691..ac411dcade6 100644 --- a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.ir.txt +++ b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.ir.txt @@ -11,6 +11,8 @@ FILE fqName: fileName:/delegatedImplementationOfJavaInterface.kt public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J $this: VALUE_PARAMETER name: type:.Test VALUE_PARAMETER name:x index:0 type:@[EnhancedNullability] kotlin.String + annotations: + NotNull(value = ) BLOCK_BODY CALL 'public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:.J visibility:private [final]' type=.J origin=null @@ -21,6 +23,8 @@ FILE fqName: fileName:/delegatedImplementationOfJavaInterface.kt public abstract fun takeNullable (x: kotlin.String?): kotlin.Unit declared in .J $this: VALUE_PARAMETER name: type:.Test VALUE_PARAMETER name:x index:0 type:kotlin.String? + annotations: + Nullable(value = ) BLOCK_BODY CALL 'public abstract fun takeNullable (x: kotlin.String?): kotlin.Unit declared in .J' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:.J visibility:private [final]' type=.J origin=null diff --git a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.kt.txt b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.kt.txt index 829068f54fb..35defedd410 100644 --- a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.kt.txt +++ b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.kt.txt @@ -5,11 +5,11 @@ class Test : J { } - override fun takeNotNull(x: @EnhancedNullability String) { + override fun takeNotNull(@NotNull x: @EnhancedNullability String) { .#j.takeNotNull(x = x) } - override fun takeNullable(x: String?) { + override fun takeNullable(@Nullable x: String?) { .#j.takeNullable(x = x) } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt index fddf060b56a..981717f10c6 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt @@ -104,8 +104,7 @@ internal class DynamicCompilerDriver : CompilerDriver() { require(frontendOutput is FirOutput.Full) val fir2IrOutput = engine.runFir2Ir(frontendOutput) - // FIXME: KT-58099 - // engine.runK2SpecialBackendChecks(fir2IrOutput) + engine.runK2SpecialBackendChecks(fir2IrOutput) return engine.runFirSerializer(fir2IrOutput) }