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 5fc22df0b6c..3d13b76469d 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 @@ -424,21 +424,6 @@ internal fun FirSimpleFunction.processOverriddenFunctionSymbols( } } -context(Fir2IrComponents) -internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(containingClass: FirClass): List { - val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() - val overriddenSet = mutableSetOf() - - processOverriddenFunctionSymbols(containingClass) { - for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) { - assert(overridden != symbol) { "Cannot add function $overridden to its own overriddenSymbols" } - overriddenSet += overridden - } - } - - return overriddenSet.toList() -} - fun FirTypeScope.processOverriddenFunctionsFromSuperClasses( functionSymbol: FirNamedFunctionSymbol, containingClass: FirClass, @@ -471,15 +456,6 @@ fun FirTypeScope.processOverriddenPropertiesFromSuperClasses( processor(unwrapped) } -context(Fir2IrComponents) -@OptIn(IrSymbolInternals::class) -private fun FirClass.getSuperTypesAsIrClasses(): Set? { - val irClass = - declarationStorage.classifierStorage.getIrClassSymbol(symbol).owner as? IrClass ?: return null - - return irClass.superTypes.mapNotNull { it.classifierOrNull?.owner as? IrClass }.toSet() -} - context(Fir2IrComponents) internal fun FirProperty.processOverriddenPropertySymbols( containingClass: FirClass, @@ -503,51 +479,6 @@ internal fun FirProperty.processOverriddenPropertySymbols( return overriddenSet.toList() } -context(Fir2IrComponents) -internal fun FirProperty.generateOverriddenPropertySymbols(containingClass: FirClass): List { - val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() - val overriddenSet = mutableSetOf() - - processOverriddenPropertySymbols(containingClass) { - for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) { - assert(overridden != symbol) { "Cannot add property $overridden to its own overriddenSymbols" } - overriddenSet += overridden - } - } - - return overriddenSet.toList() -} - -context(Fir2IrComponents) -@OptIn(IrSymbolInternals::class) -internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirClass, isGetter: Boolean): List { - val scope = containingClass.unsubstitutedScope() - scope.processPropertiesByName(name) {} - val overriddenSet = mutableSetOf() - val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() - - scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol -> - if (!session.visibilityChecker.isVisibleForOverriding( - candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir - ) - ) { - return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT - } - - for (overriddenIrPropertySymbol in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(overriddenSymbol, superClasses)) { - val overriddenIrAccessorSymbol = - if (isGetter) overriddenIrPropertySymbol.owner.getter?.symbol - else overriddenIrPropertySymbol.owner.setter?.symbol - if (overriddenIrAccessorSymbol != null) { - assert(overriddenIrAccessorSymbol != symbol) { "Cannot add property $overriddenIrAccessorSymbol to its own overriddenSymbols" } - overriddenSet += overriddenIrAccessorSymbol - } - } - ProcessorAction.NEXT - } - return overriddenSet.toList() -} - private val nameToOperationConventionOrigin = mutableMapOf( OperatorNameConventions.PLUS to IrStatementOrigin.PLUS, OperatorNameConventions.MINUS to IrStatementOrigin.MINUS, 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 5380586fb27..8c188f7c83d 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 @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAMES import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.backend.generators.generateOverriddenAccessorSymbols import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildProperty import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index b47f85ef71a..ad4ca76f632 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -522,3 +522,71 @@ class FakeOverrideGenerator( } } +context(Fir2IrComponents) +@OptIn(IrSymbolInternals::class) +internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirClass, isGetter: Boolean): List { + val scope = containingClass.unsubstitutedScope() + scope.processPropertiesByName(name) {} + val overriddenSet = mutableSetOf() + val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() + + scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol -> + if (!session.visibilityChecker.isVisibleForOverriding( + candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir + ) + ) { + return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT + } + + for (overriddenIrPropertySymbol in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(overriddenSymbol, superClasses)) { + val overriddenIrAccessorSymbol = + if (isGetter) overriddenIrPropertySymbol.owner.getter?.symbol + else overriddenIrPropertySymbol.owner.setter?.symbol + if (overriddenIrAccessorSymbol != null) { + assert(overriddenIrAccessorSymbol != symbol) { "Cannot add property $overriddenIrAccessorSymbol to its own overriddenSymbols" } + overriddenSet += overriddenIrAccessorSymbol + } + } + ProcessorAction.NEXT + } + return overriddenSet.toList() +} + +context(Fir2IrComponents) +internal fun FirProperty.generateOverriddenPropertySymbols(containingClass: FirClass): List { + val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() + val overriddenSet = mutableSetOf() + + processOverriddenPropertySymbols(containingClass) { + for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) { + assert(overridden != symbol) { "Cannot add property $overridden to its own overriddenSymbols" } + overriddenSet += overridden + } + } + + return overriddenSet.toList() +} + +context(Fir2IrComponents) +internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(containingClass: FirClass): List { + val superClasses = containingClass.getSuperTypesAsIrClasses() ?: return emptyList() + val overriddenSet = mutableSetOf() + + processOverriddenFunctionSymbols(containingClass) { + for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) { + assert(overridden != symbol) { "Cannot add function $overridden to its own overriddenSymbols" } + overriddenSet += overridden + } + } + + return overriddenSet.toList() +} + +context(Fir2IrComponents) +@OptIn(IrSymbolInternals::class) +private fun FirClass.getSuperTypesAsIrClasses(): Set? { + val irClass = + declarationStorage.classifierStorage.getIrClassSymbol(symbol).owner as? IrClass ?: return null + + return irClass.superTypes.mapNotNull { it.classifierOrNull?.owner as? IrClass }.toSet() +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt index 44f25cf3c80..b9014635cc6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.isAnnotationClass import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.generators.generateOverriddenPropertySymbols import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter 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 37f09a4b2ab..da07ef1b821 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 @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.lazy import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.generators.generateOverriddenAccessorSymbols import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index 34a4dbb9a91..5988da81731 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.lazy import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.backend.contextReceiversForFunctionOrContainingProperty -import org.jetbrains.kotlin.fir.backend.generateOverriddenFunctionSymbols +import org.jetbrains.kotlin.fir.backend.generators.generateOverriddenFunctionSymbols import org.jetbrains.kotlin.fir.backend.toIrType import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirRegularClass