From 931ba4892a9f12bbd49902906307fc9d83970ed9 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 11 May 2020 15:02:46 -0700 Subject: [PATCH] FIR2IR: split property annotations according to use-site targets. --- .../generators/ClassMemberGenerator.kt | 55 ++++++++++++++++--- .../annotatedAnnotationParameter.kt | 1 - .../box/jvmName/annotationProperties.kt | 1 - .../box/jvmName/propertyAccessorsUseSite.kt | 1 - .../box/jvmName/propertySyntheticMethod.kt | 1 - .../delegateFieldWithAnnotations.fir.txt | 4 +- ...edPropertyAccessorsWithAnnotations.fir.txt | 14 +++-- .../annotations/fieldsWithAnnotations.fir.txt | 8 +-- ...onstructorParameterWithAnnotations.fir.txt | 2 - ...sorsFromClassHeaderWithAnnotations.fir.txt | 11 ++-- .../propertyAccessorsWithAnnotations.fir.txt | 11 ++-- ...ertySetterParameterWithAnnotations.fir.txt | 8 +-- 12 files changed, 78 insertions(+), 39 deletions(-) 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 06633331beb..c99aac3494f 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.backend.generators import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter @@ -164,22 +165,31 @@ internal class ClassMemberGenerator( val initializer = property.initializer val delegate = property.delegate val propertyType = property.returnTypeRef.toIrType() - irProperty.initializeBackingField(descriptor, initializerExpression = initializer ?: delegate) + irProperty.initializeBackingField(property, descriptor, initializerExpression = initializer ?: delegate) irProperty.getter?.setPropertyAccessorContent( - property.getter, irProperty, propertyType, property.getter is FirDefaultPropertyGetter + property, property.getter, irProperty, propertyType, property.getter is FirDefaultPropertyGetter ) if (property.isVar) { irProperty.setter?.setPropertyAccessorContent( - property.setter, irProperty, propertyType, property.setter is FirDefaultPropertySetter + property, property.setter, irProperty, propertyType, property.setter is FirDefaultPropertySetter ) } - irProperty.annotations = property.annotations.mapNotNull { - it.accept(visitor, null) as? IrConstructorCall - } + irProperty.annotations += + property.annotations + .filter { + it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY + } + .mapNotNull { + it.accept(visitor, null) as? IrConstructorCall + } return irProperty } - private fun IrProperty.initializeBackingField(descriptor: PropertyDescriptor, initializerExpression: FirExpression?) { + private fun IrProperty.initializeBackingField( + property: FirProperty, + descriptor: PropertyDescriptor, + initializerExpression: FirExpression? + ) { val irField = backingField ?: return conversionScope.withParent(irField) { declarationStorage.enterScope(descriptor) @@ -189,9 +199,17 @@ internal class ClassMemberGenerator( } declarationStorage.leaveScope(descriptor) } + irField.annotations += + property.annotations + .filter { + it.useSiteTarget == AnnotationUseSiteTarget.FIELD || + it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD + } + .mapNotNull { it.accept(visitor, null) as? IrConstructorCall } } private fun IrFunction.setPropertyAccessorContent( + property: FirProperty, propertyAccessor: FirPropertyAccessor?, correspondingProperty: IrProperty, propertyType: IrType, @@ -228,6 +246,29 @@ internal class ClassMemberGenerator( } } } + if (isSetter) { + annotations += + property.annotations + .filter { it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_SETTER } + .mapNotNull { it.accept(visitor, null) as? IrConstructorCall } + valueParameters.singleOrNull()?.annotations = + valueParameters.singleOrNull()?.annotations?.plus( + property.annotations + .filter { it.useSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER } + .mapNotNull { it.accept(visitor, null) as? IrConstructorCall } + )!! + } else { + annotations += + property.annotations + .filter { it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_GETTER } + .mapNotNull { it.accept(visitor, null) as? IrConstructorCall } + } + extensionReceiverParameter?.annotations = + extensionReceiverParameter?.annotations?.plus( + property.annotations + .filter { it.useSiteTarget == AnnotationUseSiteTarget.RECEIVER } + .mapNotNull { it.accept(visitor, null) as? IrConstructorCall } + )!! } private fun IrFieldAccessExpression.setReceiver(declaration: IrDeclaration): IrFieldAccessExpression { diff --git a/compiler/testData/codegen/box/annotations/annotatedAnnotationParameter.kt b/compiler/testData/codegen/box/annotations/annotatedAnnotationParameter.kt index 14421daf04e..aa997e27071 100644 --- a/compiler/testData/codegen/box/annotations/annotatedAnnotationParameter.kt +++ b/compiler/testData/codegen/box/annotations/annotatedAnnotationParameter.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvmName/annotationProperties.kt b/compiler/testData/codegen/box/jvmName/annotationProperties.kt index bd8bc9653e9..8d6f4876b18 100644 --- a/compiler/testData/codegen/box/jvmName/annotationProperties.kt +++ b/compiler/testData/codegen/box/jvmName/annotationProperties.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_REFLECT package test diff --git a/compiler/testData/codegen/box/jvmName/propertyAccessorsUseSite.kt b/compiler/testData/codegen/box/jvmName/propertyAccessorsUseSite.kt index 4198932acc2..168e3e3164b 100644 --- a/compiler/testData/codegen/box/jvmName/propertyAccessorsUseSite.kt +++ b/compiler/testData/codegen/box/jvmName/propertyAccessorsUseSite.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvmName/propertySyntheticMethod.kt b/compiler/testData/codegen/box/jvmName/propertySyntheticMethod.kt index 5782a3ca888..db83b3d4e8d 100644 --- a/compiler/testData/codegen/box/jvmName/propertySyntheticMethod.kt +++ b/compiler/testData/codegen/box/jvmName/propertySyntheticMethod.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +UseGetterNameForPropertyAnnotationsMethodOnJvm -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_REFLECT diff --git a/compiler/testData/ir/irText/declarations/annotations/delegateFieldWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/delegateFieldWithAnnotations.fir.txt index 658c6674f78..129499afe41 100644 --- a/compiler/testData/ir/irText/declarations/annotations/delegateFieldWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/delegateFieldWithAnnotations.fir.txt @@ -16,9 +16,9 @@ FILE fqName: fileName:/delegateFieldWithAnnotations.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any PROPERTY name:test1 visibility:public modality:FINAL [delegated,val] - annotations: - Ann FIELD PROPERTY_DELEGATE name:test1$delegate type:kotlin.Lazy visibility:private [final,static] + annotations: + Ann EXPRESSION_BODY CALL 'public final fun lazy (initializer: kotlin.Function0): kotlin.Lazy declared in kotlin' type=kotlin.Lazy origin=null : kotlin.Int diff --git a/compiler/testData/ir/irText/declarations/annotations/delegatedPropertyAccessorsWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/delegatedPropertyAccessorsWithAnnotations.fir.txt index ff183afe3ed..fd1b84fb997 100644 --- a/compiler/testData/ir/irText/declarations/annotations/delegatedPropertyAccessorsWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/delegatedPropertyAccessorsWithAnnotations.fir.txt @@ -84,13 +84,13 @@ FILE fqName: fileName:/delegatedPropertyAccessorsWithAnnotations.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any PROPERTY name:test1 visibility:public modality:FINAL [delegated,val] - annotations: - A(x = 'test1.get') FIELD PROPERTY_DELEGATE name:test1$delegate type:.Cell visibility:private [final,static] EXPRESSION_BODY CONSTRUCTOR_CALL 'public constructor (value: kotlin.Int) [primary] declared in .Cell' type=.Cell origin=null value: CONST Int type=kotlin.Int value=1 FUN DELEGATED_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int + annotations: + A(x = 'test1.get') correspondingProperty: PROPERTY name:test1 visibility:public modality:FINAL [delegated,val] BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' @@ -99,15 +99,13 @@ FILE fqName: fileName:/delegatedPropertyAccessorsWithAnnotations.kt thisRef: CONST Null type=kotlin.Nothing? value=null kProp: PROPERTY_REFERENCE 'public final test1: kotlin.Int [delegated,val]' field=null getter='public final fun (): kotlin.Int declared in ' setter=null type=kotlin.reflect.KProperty0 origin=PROPERTY_REFERENCE_FOR_DELEGATE PROPERTY name:test2 visibility:public modality:FINAL [delegated,var] - annotations: - A(x = 'test2.get') - A(x = 'test2.set') - A(x = 'test2.set.param') FIELD PROPERTY_DELEGATE name:test2$delegate type:.Cell visibility:private [final,static] EXPRESSION_BODY CONSTRUCTOR_CALL 'public constructor (value: kotlin.Int) [primary] declared in .Cell' type=.Cell origin=null value: CONST Int type=kotlin.Int value=2 FUN DELEGATED_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int + annotations: + A(x = 'test2.get') correspondingProperty: PROPERTY name:test2 visibility:public modality:FINAL [delegated,var] BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' @@ -116,8 +114,12 @@ FILE fqName: fileName:/delegatedPropertyAccessorsWithAnnotations.kt thisRef: CONST Null type=kotlin.Nothing? value=null kProp: PROPERTY_REFERENCE 'public final test2: kotlin.Int [delegated,var]' field=null getter='public final fun (): kotlin.Int declared in ' setter='public final fun (: kotlin.Int): kotlin.Unit declared in ' type=kotlin.reflect.KMutableProperty0 origin=PROPERTY_REFERENCE_FOR_DELEGATE FUN DELEGATED_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> (:kotlin.Int) returnType:kotlin.Unit + annotations: + A(x = 'test2.set') correspondingProperty: PROPERTY name:test2 visibility:public modality:FINAL [delegated,var] VALUE_PARAMETER name: index:0 type:kotlin.Int + annotations: + A(x = 'test2.set.param') BLOCK_BODY CALL 'public final fun setValue (thisRef: kotlin.Any?, kProp: kotlin.Any?, newValue: kotlin.Int): kotlin.Unit [operator] declared in .Cell' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD PROPERTY_DELEGATE name:test2$delegate type:.Cell visibility:private [final,static]' type=.Cell origin=null diff --git a/compiler/testData/ir/irText/declarations/annotations/fieldsWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/fieldsWithAnnotations.fir.txt index 065afd5636f..9cfd18f104c 100644 --- a/compiler/testData/ir/irText/declarations/annotations/fieldsWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/fieldsWithAnnotations.fir.txt @@ -28,9 +28,9 @@ FILE fqName: fileName:/fieldsWithAnnotations.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any PROPERTY name:testVal visibility:public modality:FINAL [val] - annotations: - TestAnn(x = 'testVal.field') FIELD PROPERTY_BACKING_FIELD name:testVal type:kotlin.String visibility:private [final,static] + annotations: + TestAnn(x = 'testVal.field') EXPRESSION_BODY CONST String type=kotlin.String value="a val" FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String @@ -39,9 +39,9 @@ FILE fqName: fileName:/fieldsWithAnnotations.kt RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:testVal type:kotlin.String visibility:private [final,static]' type=kotlin.String origin=null PROPERTY name:testVar visibility:public modality:FINAL [var] - annotations: - TestAnn(x = 'testVar.field') FIELD PROPERTY_BACKING_FIELD name:testVar type:kotlin.String visibility:private [static] + annotations: + TestAnn(x = 'testVar.field') EXPRESSION_BODY CONST String type=kotlin.String value="a var" FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String diff --git a/compiler/testData/ir/irText/declarations/annotations/primaryConstructorParameterWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/primaryConstructorParameterWithAnnotations.fir.txt index cf997e5d582..714ebbe7873 100644 --- a/compiler/testData/ir/irText/declarations/annotations/primaryConstructorParameterWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/primaryConstructorParameterWithAnnotations.fir.txt @@ -25,8 +25,6 @@ FILE fqName: fileName:/primaryConstructorParameterWithAnnotations.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[kotlin.Any]' PROPERTY name:x visibility:public modality:FINAL [val] - annotations: - Ann FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final] EXPRESSION_BODY GET_VAR 'x: kotlin.Int declared in .Test.' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER diff --git a/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsFromClassHeaderWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsFromClassHeaderWithAnnotations.fir.txt index c2b84fc759e..5ec9bd5e019 100644 --- a/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsFromClassHeaderWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsFromClassHeaderWithAnnotations.fir.txt @@ -41,12 +41,12 @@ FILE fqName: fileName:/propertyAccessorsFromClassHeaderWithAnnotations.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]' PROPERTY name:x visibility:public modality:FINAL [val] - annotations: - A(x = 'C.x.get') FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final] EXPRESSION_BODY GET_VAR 'x: kotlin.Int declared in .C.' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C) returnType:kotlin.Int + annotations: + A(x = 'C.x.get') correspondingProperty: PROPERTY name:x visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.C BLOCK_BODY @@ -54,13 +54,12 @@ FILE fqName: fileName:/propertyAccessorsFromClassHeaderWithAnnotations.kt GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null receiver: GET_VAR ': .C declared in .C.' type=.C origin=null PROPERTY name:y visibility:public modality:FINAL [var] - annotations: - A(x = 'C.y.get') - A(x = 'C.y.set') FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private EXPRESSION_BODY GET_VAR 'y: kotlin.Int declared in .C.' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C) returnType:kotlin.Int + annotations: + A(x = 'C.y.get') correspondingProperty: PROPERTY name:y visibility:public modality:FINAL [var] $this: VALUE_PARAMETER name: type:.C BLOCK_BODY @@ -68,6 +67,8 @@ FILE fqName: fileName:/propertyAccessorsFromClassHeaderWithAnnotations.kt GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private' type=kotlin.Int origin=null receiver: GET_VAR ': .C declared in .C.' type=.C origin=null FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C, :kotlin.Int) returnType:kotlin.Unit + annotations: + A(x = 'C.y.set') correspondingProperty: PROPERTY name:y visibility:public modality:FINAL [var] $this: VALUE_PARAMETER name: type:.C VALUE_PARAMETER name: index:0 type:kotlin.Int diff --git a/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsWithAnnotations.fir.txt index 3b9fc31aed6..e31ba1a60ac 100644 --- a/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/propertyAccessorsWithAnnotations.fir.txt @@ -50,29 +50,30 @@ FILE fqName: fileName:/propertyAccessorsWithAnnotations.kt VALUE_PARAMETER name:value index:0 type:kotlin.String BLOCK_BODY PROPERTY name:test3 visibility:public modality:FINAL [val] - annotations: - TestAnn(x = 'test3.get') FIELD PROPERTY_BACKING_FIELD name:test3 type:kotlin.String visibility:private [final,static] EXPRESSION_BODY CONST String type=kotlin.String value="" FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String + annotations: + TestAnn(x = 'test3.get') correspondingProperty: PROPERTY name:test3 visibility:public modality:FINAL [val] BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test3 type:kotlin.String visibility:private [final,static]' type=kotlin.String origin=null PROPERTY name:test4 visibility:public modality:FINAL [var] - annotations: - TestAnn(x = 'test4.get') - TestAnn(x = 'test4.set') FIELD PROPERTY_BACKING_FIELD name:test4 type:kotlin.String visibility:private [static] EXPRESSION_BODY CONST String type=kotlin.String value="" FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String + annotations: + TestAnn(x = 'test4.get') correspondingProperty: PROPERTY name:test4 visibility:public modality:FINAL [var] BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test4 type:kotlin.String visibility:private [static]' type=kotlin.String origin=null FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> (:kotlin.String) returnType:kotlin.Unit + annotations: + TestAnn(x = 'test4.set') correspondingProperty: PROPERTY name:test4 visibility:public modality:FINAL [var] VALUE_PARAMETER name: index:0 type:kotlin.String BLOCK_BODY diff --git a/compiler/testData/ir/irText/declarations/annotations/propertySetterParameterWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/propertySetterParameterWithAnnotations.fir.txt index 93fe3ccf2f3..e3ed3e1a26c 100644 --- a/compiler/testData/ir/irText/declarations/annotations/propertySetterParameterWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/propertySetterParameterWithAnnotations.fir.txt @@ -16,8 +16,6 @@ FILE fqName: fileName:/propertySetterParameterWithAnnotations.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any PROPERTY name:p visibility:public modality:FINAL [var] - annotations: - AnnParam FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:private [static] EXPRESSION_BODY CONST Int type=kotlin.Int value=0 @@ -29,6 +27,8 @@ FILE fqName: fileName:/propertySetterParameterWithAnnotations.kt FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> (:kotlin.Int) returnType:kotlin.Unit correspondingProperty: PROPERTY name:p visibility:public modality:FINAL [var] VALUE_PARAMETER name: index:0 type:kotlin.Int + annotations: + AnnParam BLOCK_BODY SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:private [static]' type=kotlin.Unit origin=null value: GET_VAR ': kotlin.Int declared in .' type=kotlin.Int origin=null @@ -42,8 +42,6 @@ FILE fqName: fileName:/propertySetterParameterWithAnnotations.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]' PROPERTY name:p visibility:public modality:FINAL [var] - annotations: - AnnParam FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:private EXPRESSION_BODY GET_VAR 'p: kotlin.Int declared in .C.' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER @@ -58,6 +56,8 @@ FILE fqName: fileName:/propertySetterParameterWithAnnotations.kt correspondingProperty: PROPERTY name:p visibility:public modality:FINAL [var] $this: VALUE_PARAMETER name: type:.C VALUE_PARAMETER name: index:0 type:kotlin.Int + annotations: + AnnParam BLOCK_BODY SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:private' type=kotlin.Unit origin=null receiver: GET_VAR ': .C declared in .C.' type=.C origin=null