diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt index f9027085356..ab514554b50 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.ir.util.KotlinMangler import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid +import org.jetbrains.kotlin.utils.addToStdlib.runIf data class FirResult(val outputs: List) @@ -123,14 +124,18 @@ fun FirResult.convertToIrAndActualize( components.fakeOverrideBuilder.buildForAll(allIrModules, temporaryResolver) } val expectActualMap = irActualizer?.actualizeCallablesAndMergeModules() ?: emptyMap() - if (!components.configuration.useFirBasedFakeOverrideGenerator) { + val fakeOverrideResolver = runIf(!components.configuration.useFirBasedFakeOverrideGenerator) { val fakeOverrideResolver = SpecialFakeOverrideSymbolsResolver(expectActualMap) irModuleFragment.acceptVoid(SpecialFakeOverrideSymbolsResolverVisitor(fakeOverrideResolver)) @OptIn(Fir2IrSymbolsMappingForLazyClasses.SymbolRemapperInternals::class) components.symbolsMappingForLazyClasses.initializeSymbolMap(fakeOverrideResolver) + fakeOverrideResolver } Fir2IrConverter.evaluateConstants(irModuleFragment, components) val actualizationResult = irActualizer?.runChecksAndFinalize(expectActualMap) + + fakeOverrideResolver?.cacheFakeOverridesOfAllClasses(irModuleFragment) + pluginContext.applyIrGenerationExtensions(irModuleFragment, irGeneratorExtensions) return Fir2IrActualizedResult(irModuleFragment, components, pluginContext, actualizationResult) } diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/SpecialFakeOverrideSymbolsResolver.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/SpecialFakeOverrideSymbolsResolver.kt index 49c97290d38..4f05073519e 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/SpecialFakeOverrideSymbolsResolver.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/SpecialFakeOverrideSymbolsResolver.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.util.SymbolRemapper import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid -import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled /** * This class provides utility to resolve [org.jetbrains.kotlin.ir.symbols.impl.IrFunctionFakeOverrideSymbol] @@ -112,6 +111,24 @@ class SpecialFakeOverrideSymbolsResolver(private val expectActualMap: Map