FIR: Set correct modality to default accessors on deserialization

fixes some tests with new IrBuiltIns
This commit is contained in:
Ilya Chernikov
2021-06-07 11:28:26 +02:00
committed by TeamCityServer
parent 5b677c068f
commit 3b20ec46ef
2 changed files with 25 additions and 26 deletions
@@ -249,10 +249,12 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
emptyList() emptyList()
} }
val propertyModality = ProtoEnumFlags.modality(Flags.MODALITY.get(flags))
val getter = if (hasGetter) { val getter = if (hasGetter) {
val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags)) 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) val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
if (Flags.IS_NOT_DEFAULT.get(getterFlags)) { if (Flags.IS_NOT_DEFAULT.get(getterFlags)) {
buildPropertyAccessor { buildPropertyAccessor {
@@ -261,11 +263,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
this.returnTypeRef = returnTypeRef this.returnTypeRef = returnTypeRef
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
isGetter = true isGetter = true
status = FirResolvedDeclarationStatusImpl( status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
visibility,
modality,
effectiveVisibility
).apply {
isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags) isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags)
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags) isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags)
} }
@@ -275,7 +273,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
versionRequirementsTable = c.versionRequirementTable versionRequirementsTable = c.versionRequirementTable
} }
} else { } else {
FirDefaultPropertyGetter(null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility) FirDefaultPropertyGetter(
null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility
)
}.apply { }.apply {
(annotations as MutableList<FirAnnotationCall>) += (annotations as MutableList<FirAnnotationCall>) +=
c.annotationDeserializer.loadPropertyGetterAnnotations( c.annotationDeserializer.loadPropertyGetterAnnotations(
@@ -289,7 +289,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val setter = if (Flags.HAS_SETTER.get(flags)) { val setter = if (Flags.HAS_SETTER.get(flags)) {
val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags)) 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) val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
if (Flags.IS_NOT_DEFAULT.get(setterFlags)) { if (Flags.IS_NOT_DEFAULT.get(setterFlags)) {
buildPropertyAccessor { buildPropertyAccessor {
@@ -298,11 +298,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
this.returnTypeRef = FirImplicitUnitTypeRef(source) this.returnTypeRef = FirImplicitUnitTypeRef(source)
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
isGetter = false isGetter = false
status = FirResolvedDeclarationStatusImpl( status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
visibility,
modality,
effectiveVisibility
).apply {
isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags) isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags)
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags) isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags)
} }
@@ -318,7 +314,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
versionRequirementsTable = c.versionRequirementTable versionRequirementsTable = c.versionRequirementTable
} }
} else { } else {
FirDefaultPropertySetter(null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility) FirDefaultPropertySetter(
null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility
)
}.apply { }.apply {
(annotations as MutableList<FirAnnotationCall>) += (annotations as MutableList<FirAnnotationCall>) +=
c.annotationDeserializer.loadPropertySetterAnnotations( c.annotationDeserializer.loadPropertySetterAnnotations(
@@ -343,11 +341,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
dispatchReceiverType = c.dispatchReceiver dispatchReceiverType = c.dispatchReceiver
isLocal = false isLocal = false
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)) val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags))
status = FirResolvedDeclarationStatusImpl( status = FirResolvedDeclarationStatusImpl(visibility, propertyModality, visibility.toEffectiveVisibility(classSymbol)).apply {
visibility,
ProtoEnumFlags.modality(Flags.MODALITY.get(flags)),
visibility.toEffectiveVisibility(classSymbol)
).apply {
isExpect = Flags.IS_EXPECT_PROPERTY.get(flags) isExpect = Flags.IS_EXPECT_PROPERTY.get(flags)
isActual = false isActual = false
isOverride = false isOverride = false
@@ -30,6 +30,7 @@ abstract class FirDefaultPropertyAccessor(
valueParameters: MutableList<FirValueParameter>, valueParameters: MutableList<FirValueParameter>,
isGetter: Boolean, isGetter: Boolean,
visibility: Visibility, visibility: Visibility,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null, effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol symbol: FirPropertyAccessorSymbol
) : FirPropertyAccessorImpl( ) : FirPropertyAccessorImpl(
@@ -40,9 +41,9 @@ abstract class FirDefaultPropertyAccessor(
FirDeclarationAttributes(), FirDeclarationAttributes(),
propertyTypeRef, propertyTypeRef,
status = if (effectiveVisibility == null) status = if (effectiveVisibility == null)
FirDeclarationStatusImpl(visibility, Modality.FINAL) FirDeclarationStatusImpl(visibility, modality)
else else
FirResolvedDeclarationStatusImpl(visibility, Modality.FINAL, effectiveVisibility), FirResolvedDeclarationStatusImpl(visibility, modality, effectiveVisibility),
deprecation = null, deprecation = null,
containerSource = null, containerSource = null,
dispatchReceiverType = null, dispatchReceiverType = null,
@@ -72,9 +73,9 @@ abstract class FirDefaultPropertyAccessor(
isGetter: Boolean isGetter: Boolean
): FirDefaultPropertyAccessor { ): FirDefaultPropertyAccessor {
return if (isGetter) { return if (isGetter) {
FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility) FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL)
} else { } else {
FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility) FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL)
} }
} }
} }
@@ -86,6 +87,7 @@ class FirDefaultPropertyGetter(
origin: FirDeclarationOrigin, origin: FirDeclarationOrigin,
propertyTypeRef: FirTypeRef, propertyTypeRef: FirTypeRef,
visibility: Visibility, visibility: Visibility,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null, effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor( ) : FirDefaultPropertyAccessor(
@@ -96,6 +98,7 @@ class FirDefaultPropertyGetter(
valueParameters = mutableListOf(), valueParameters = mutableListOf(),
isGetter = true, isGetter = true,
visibility = visibility, visibility = visibility,
modality = modality,
effectiveVisibility = effectiveVisibility, effectiveVisibility = effectiveVisibility,
symbol = symbol symbol = symbol
) )
@@ -106,6 +109,7 @@ class FirDefaultPropertySetter(
origin: FirDeclarationOrigin, origin: FirDeclarationOrigin,
propertyTypeRef: FirTypeRef, propertyTypeRef: FirTypeRef,
visibility: Visibility, visibility: Visibility,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null, effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor( ) : FirDefaultPropertyAccessor(
@@ -123,7 +127,8 @@ class FirDefaultPropertySetter(
} }
), ),
isGetter = false, isGetter = false,
visibility, visibility = visibility,
effectiveVisibility, modality = modality,
symbol effectiveVisibility = effectiveVisibility,
symbol = symbol
) )