diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index b7c15837173..9dd45575f32 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -249,10 +249,12 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { emptyList() } + val propertyModality = ProtoEnumFlags.modality(Flags.MODALITY.get(flags)) + val getter = if (hasGetter) { val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags)) - val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags)) + val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags)) val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol) if (Flags.IS_NOT_DEFAULT.get(getterFlags)) { buildPropertyAccessor { @@ -261,11 +263,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { this.returnTypeRef = returnTypeRef resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES isGetter = true - status = FirResolvedDeclarationStatusImpl( - visibility, - modality, - effectiveVisibility - ).apply { + status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply { isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags) isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags) } @@ -275,7 +273,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { versionRequirementsTable = c.versionRequirementTable } } else { - FirDefaultPropertyGetter(null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility) + FirDefaultPropertyGetter( + null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility + ) }.apply { (annotations as MutableList) += c.annotationDeserializer.loadPropertyGetterAnnotations( @@ -289,7 +289,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val setter = if (Flags.HAS_SETTER.get(flags)) { val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags)) - val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags)) + val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags)) val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol) if (Flags.IS_NOT_DEFAULT.get(setterFlags)) { buildPropertyAccessor { @@ -298,11 +298,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { this.returnTypeRef = FirImplicitUnitTypeRef(source) resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES isGetter = false - status = FirResolvedDeclarationStatusImpl( - visibility, - modality, - effectiveVisibility - ).apply { + status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply { isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags) isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags) } @@ -318,7 +314,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { versionRequirementsTable = c.versionRequirementTable } } else { - FirDefaultPropertySetter(null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility) + FirDefaultPropertySetter( + null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility + ) }.apply { (annotations as MutableList) += c.annotationDeserializer.loadPropertySetterAnnotations( @@ -343,11 +341,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { dispatchReceiverType = c.dispatchReceiver isLocal = false val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)) - status = FirResolvedDeclarationStatusImpl( - visibility, - ProtoEnumFlags.modality(Flags.MODALITY.get(flags)), - visibility.toEffectiveVisibility(classSymbol) - ).apply { + status = FirResolvedDeclarationStatusImpl(visibility, propertyModality, visibility.toEffectiveVisibility(classSymbol)).apply { isExpect = Flags.IS_EXPECT_PROPERTY.get(flags) isActual = false isOverride = false diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index 7cc1212b635..edae05e1d51 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -30,6 +30,7 @@ abstract class FirDefaultPropertyAccessor( valueParameters: MutableList, isGetter: Boolean, visibility: Visibility, + modality: Modality = Modality.FINAL, effectiveVisibility: EffectiveVisibility? = null, symbol: FirPropertyAccessorSymbol ) : FirPropertyAccessorImpl( @@ -40,9 +41,9 @@ abstract class FirDefaultPropertyAccessor( FirDeclarationAttributes(), propertyTypeRef, status = if (effectiveVisibility == null) - FirDeclarationStatusImpl(visibility, Modality.FINAL) + FirDeclarationStatusImpl(visibility, modality) else - FirResolvedDeclarationStatusImpl(visibility, Modality.FINAL, effectiveVisibility), + FirResolvedDeclarationStatusImpl(visibility, modality, effectiveVisibility), deprecation = null, containerSource = null, dispatchReceiverType = null, @@ -72,9 +73,9 @@ abstract class FirDefaultPropertyAccessor( isGetter: Boolean ): FirDefaultPropertyAccessor { return if (isGetter) { - FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility) + FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL) } else { - FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility) + FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL) } } } @@ -86,6 +87,7 @@ class FirDefaultPropertyGetter( origin: FirDeclarationOrigin, propertyTypeRef: FirTypeRef, visibility: Visibility, + modality: Modality = Modality.FINAL, effectiveVisibility: EffectiveVisibility? = null, symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() ) : FirDefaultPropertyAccessor( @@ -96,6 +98,7 @@ class FirDefaultPropertyGetter( valueParameters = mutableListOf(), isGetter = true, visibility = visibility, + modality = modality, effectiveVisibility = effectiveVisibility, symbol = symbol ) @@ -106,6 +109,7 @@ class FirDefaultPropertySetter( origin: FirDeclarationOrigin, propertyTypeRef: FirTypeRef, visibility: Visibility, + modality: Modality = Modality.FINAL, effectiveVisibility: EffectiveVisibility? = null, symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() ) : FirDefaultPropertyAccessor( @@ -123,7 +127,8 @@ class FirDefaultPropertySetter( } ), isGetter = false, - visibility, - effectiveVisibility, - symbol + visibility = visibility, + modality = modality, + effectiveVisibility = effectiveVisibility, + symbol = symbol )