diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index c6605c1c421..39c2005d13c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.processDirectlyOverriddenFunctions +import org.jetbrains.kotlin.fir.scopes.processDirectlyOverriddenProperties import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.AccessorSymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol @@ -313,6 +314,30 @@ internal fun FirSimpleFunction.generateOverriddenFunctionSymbols( return overriddenSet.toList() } +internal fun FirProperty.generateOverriddenAccessorSymbols( + containingClass: FirClass<*>, + isGetter: Boolean, + session: FirSession, + scopeSession: ScopeSession, + declarationStorage: Fir2IrDeclarationStorage +): List { + val scope = containingClass.unsubstitutedScope(session, scopeSession) + scope.processPropertiesByName(name) {} + val overriddenSet = mutableSetOf() + scope.processDirectlyOverriddenProperties(symbol) { + if (it.fir.visibility == Visibilities.PRIVATE) { + return@processDirectlyOverriddenProperties ProcessorAction.NEXT + } + val overriddenProperty = declarationStorage.getIrPropertyOrFieldSymbol(it.unwrapSubstitutionOverrides()) as IrPropertySymbol + val overriddenAccessor = if (isGetter) overriddenProperty.owner.getter?.symbol else overriddenProperty.owner.setter?.symbol + if (overriddenAccessor != null) { + overriddenSet += overriddenAccessor + } + ProcessorAction.NEXT + } + return overriddenSet.toList() +} + internal fun IrClass.findMatchingOverriddenSymbolsFromSupertypes( irBuiltIns: IrBuiltIns, target: IrDeclaration, 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 1e4ab81281a..a03be4b208c 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 @@ -264,25 +264,9 @@ internal class ClassMemberGenerator( } } if (containingClass != null) { - val scope = containingClass.unsubstitutedScope(session, scopeSession) - scope.processPropertiesByName(property.name) {} - val overriddenSet = mutableSetOf() - scope.processDirectlyOverriddenProperties(property.symbol) { - if (it.fir.visibility == Visibilities.PRIVATE) { - return@processDirectlyOverriddenProperties ProcessorAction.NEXT - } - val overridden = declarationStorage.getIrPropertyOrFieldSymbol(it.unwrapSubstitutionOverrides()) - if (overridden is IrPropertySymbol) { - val accessorSymbol = - if (isGetter) overridden.owner.getter?.symbol - else overridden.owner.setter?.symbol - if (accessorSymbol != null) { - overriddenSet += accessorSymbol - } - } - ProcessorAction.NEXT - } - this.overriddenSymbols = overriddenSet.toList() + this.overriddenSymbols = property.generateOverriddenAccessorSymbols( + containingClass, isGetter, session, scopeSession, declarationStorage + ) } }