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 67c6f2b902e..40998d0e09c 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 @@ -168,7 +168,7 @@ fun FirResult.convertToIrAndActualize( actualizerTypeContextProvider(fir2IrResult.irModuleFragment.irBuiltins), fir2IrConfiguration.languageVersionSettings, commonMemberStorage.symbolTable, - fir2IrResult.components.irOverridingUtil, + fir2IrResult.components.fakeOverrideBuilder, fir2IrConfiguration.useIrFakeOverrideBuilder, fir2IrConfiguration.expectActualTracker, ) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt index 66e4e4eb7df..587715e2422 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer import org.jetbrains.kotlin.ir.IrLock import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.linkage.IrProvider -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.util.SymbolTable interface Fir2IrComponents { @@ -43,7 +43,7 @@ interface Fir2IrComponents { val callGenerator: CallAndReferenceGenerator val fakeOverrideGenerator: FakeOverrideGenerator val delegatedMemberGenerator: DelegatedMemberGenerator - val irOverridingUtil: IrOverridingUtil + val fakeOverrideBuilder: IrFakeOverrideBuilder val extensions: Fir2IrExtensions val configuration: Fir2IrConfiguration diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt index 320c490883b..a7ba46b10fd 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrLock import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.linkage.IrProvider -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.util.KotlinMangler import org.jetbrains.kotlin.ir.util.SymbolTable @@ -25,7 +25,7 @@ class Fir2IrComponentsStorage( override val extensions: Fir2IrExtensions, override val configuration: Fir2IrConfiguration, override val visibilityConverter: Fir2IrVisibilityConverter, - irOverridingUtilProvider: (IrBuiltIns) -> IrOverridingUtil, + irFakeOverrideBuilderProvider: (IrBuiltIns) -> IrFakeOverrideBuilder, moduleDescriptor: FirModuleDescriptor, commonMemberStorage: Fir2IrCommonMemberStorage, irMangler: KotlinMangler.IrMangler, @@ -49,7 +49,7 @@ class Fir2IrComponentsStorage( this, configuration.languageVersionSettings, moduleDescriptor, irMangler ) override val builtIns: Fir2IrBuiltIns = Fir2IrBuiltIns(this, specialSymbolProvider) - override val irOverridingUtil: IrOverridingUtil = irOverridingUtilProvider(irBuiltIns) + override val fakeOverrideBuilder: IrFakeOverrideBuilder = irFakeOverrideBuilderProvider(irBuiltIns) override val irProviders: List = listOf(FirIrProvider(this)) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 6ada67dfce1..4d6bad134cd 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -43,7 +43,7 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment import org.jetbrains.kotlin.ir.interpreter.checker.EvaluationMode import org.jetbrains.kotlin.ir.interpreter.transformer.transformConst -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.types.IrTypeSystemContext import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorPublicSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl @@ -558,7 +558,7 @@ class Fir2IrConverter( val components = Fir2IrComponentsStorage( session, scopeSession, irFactory, fir2IrExtensions, fir2IrConfiguration, visibilityConverter, { irBuiltins -> - IrOverridingUtil( + IrFakeOverrideBuilder( typeContextProvider(irBuiltins), Fir2IrFakeOverrideStrategy(friendModulesMap(session), commonMemberStorage.symbolTable, irMangler), externalOverridabilityConditions = emptyList(), // TODO: KT-61370, KT-61804. @@ -583,7 +583,7 @@ class Fir2IrConverter( ) if (fir2IrConfiguration.useIrFakeOverrideBuilder) { - FakeOverrideRebuilder(commonMemberStorage.symbolTable, components.irOverridingUtil).rebuildFakeOverrides(irModuleFragment) + FakeOverrideRebuilder(commonMemberStorage.symbolTable, components.fakeOverrideBuilder).rebuildFakeOverrides(irModuleFragment) } return Fir2IrResult(irModuleFragment, components, moduleDescriptor) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt index c4002bae609..36a23679dd7 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrFakeOverrideStrategy.kt @@ -9,8 +9,8 @@ import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSigna import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunctionWithLateBinding import org.jetbrains.kotlin.ir.declarations.IrPropertyWithLateBinding -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides import org.jetbrains.kotlin.ir.overrides.FakeOverrideBuilderStrategy +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides import org.jetbrains.kotlin.ir.symbols.impl.IrPropertyPublicSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/FakeOverrideRebuilder.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/FakeOverrideRebuilder.kt index 5f910848e8c..04f48177273 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/FakeOverrideRebuilder.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/FakeOverrideRebuilder.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference import org.jetbrains.kotlin.ir.expressions.IrPropertyReference -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -52,7 +52,7 @@ import org.jetbrains.kotlin.utils.newHashSetWithExpectedSize */ class FakeOverrideRebuilder( val symbolTable: SymbolTable, - val irOverridingUtil: IrOverridingUtil, + val fakeOverrideBuilder: IrFakeOverrideBuilder, ) { private val removedFakeOverrides = mutableMapOf>() private val processedClasses = hashSetOf() @@ -115,7 +115,7 @@ class FakeOverrideRebuilder( for (c in irClass.superTypes) { c.getClass()?.let { rebuildClassFakeOverrides(it) } } - irOverridingUtil.buildFakeOverridesForClass(irClass, false) + fakeOverrideBuilder.buildFakeOverridesForClass(irClass, false) val overriddenMap = mutableMapOf() diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt index ed6a8290cb2..71b913a7bee 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.IrTypeSystemContext import org.jetbrains.kotlin.ir.util.* @@ -27,7 +27,7 @@ object IrActualizer { typeSystemContext: IrTypeSystemContext, languageVersionSettings: LanguageVersionSettings, symbolTable: SymbolTable, - irOverridingUtil: IrOverridingUtil, + fakeOverrideBuilder: IrFakeOverrideBuilder, useIrFakeOverrideBuilder: Boolean, expectActualTracker: ExpectActualTracker? ): IrActualizedResult { @@ -79,7 +79,7 @@ object IrActualizer { if (useIrFakeOverrideBuilder) { // 8. Rebuild fake overrides from stretch, as they could become invalid during actualization - FakeOverrideRebuilder(symbolTable, irOverridingUtil).rebuildFakeOverrides(mainFragment) + FakeOverrideRebuilder(symbolTable, fakeOverrideBuilder).rebuildFakeOverrides(mainFragment) } return IrActualizedResult(removedExpectDeclarations) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt index a4ba51c3dc6..252f62a79f9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/CopyIrTreeWithSymbolsForFakeOverrides.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrOverridableMember import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.* diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt index f73b3372776..0da2b0fa495 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideBuilderStrategy.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.IrSimpleType @@ -22,17 +21,40 @@ import org.jetbrains.kotlin.ir.util.hasAnnotation import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.types.Variance +/** + * This class is a customization point for IrFakeOverrideBuilder. + * + * While the main [IrFakeOverrideBuilder] class works on: + * * Choosing for which functions fake overrides should be created. + * * Handling merging overrides coming from different super types + * + * These class inheritors are responsible for: + * * Actually creating the fake override for a single member of a single super type + * * Creating and registering in appropriate storages of fake override member symbols + * + */ abstract class FakeOverrideBuilderStrategy( private val friendModules: Map>, private val unimplementedOverridesStrategy: IrUnimplementedOverridesStrategy ) { + /** + * Creates a fake override for [member] from [superType] to be added to the class [clazz] + */ fun fakeOverrideMember(superType: IrType, member: IrOverridableMember, clazz: IrClass): IrOverridableMember = buildFakeOverrideMember(superType, member, clazz, friendModules, unimplementedOverridesStrategy) + /** + * This function is a callback for fake override creation finish. + * + * It can modify the created fake override, if needed. + */ fun postProcessGeneratedFakeOverride(fakeOverride: IrOverridableMember, clazz: IrClass) { unimplementedOverridesStrategy.postProcessGeneratedFakeOverride(fakeOverride as IrOverridableDeclaration<*>, clazz) } + /** + * Create a symbol for the fake override. + */ fun linkFakeOverride(fakeOverride: IrOverridableMember, compatibilityMode: Boolean) { when (fakeOverride) { is IrFunctionWithLateBinding -> linkFunctionFakeOverride(fakeOverride, compatibilityMode) @@ -40,9 +62,35 @@ abstract class FakeOverrideBuilderStrategy( else -> error("Unexpected fake override: $fakeOverride") } } + + /** + * Most implementations need [file] in which they are working now. + * + * It should be avoided in the future, but for now it's like this. + * For now, it's called with class file when class processing is started. + * + * Contract: + * * must call [block] exactly once. + */ abstract fun inFile(file: IrFile?, block: () -> Unit) + /** + * Callback for creating a symbol for fake override function. + * + * Contract: + * * [IrFunctionWithLateBinding.acquireSymbol] must be called inside on [function] argument + */ protected abstract fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) + + /** + * Callback for creating a symbol for fake override property. + * + * Also, must create symbols for property's getter and setter. + * + * Contract: + * * [IrPropertyWithLateBinding.acquireSymbol] must be called inside on [property] argument + * * [IrFunctionWithLateBinding.acquireSymbol] must be called inside on getter and setter of [property] argument, if they exist + */ protected abstract fun linkPropertyFakeOverride(property: IrPropertyWithLateBinding, manglerCompatibleMode: Boolean) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt index 064f905e762..de2c1175166 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.ir.overrides import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.util.* class FakeOverrideCopier( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt similarity index 95% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt rename to compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt index e25ddfca3fd..8351297eb55 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt @@ -23,15 +23,9 @@ import org.jetbrains.kotlin.utils.filterIsInstanceAnd import org.jetbrains.kotlin.utils.memoryOptimizedMap import org.jetbrains.kotlin.utils.memoryOptimizedMapNotNull -// TODO: -// The below pile of code is basically half of OverridingUtil.java -// adapted to IR and converted to Kotlin. -// Need to convert frontend's OverridingUtil to Kotlin and merge this codes -// to use abstract overridable member interfaces. - -class IrOverridingUtil( +class IrFakeOverrideBuilder( private val typeSystem: IrTypeSystemContext, - private val fakeOverrideBuilder: FakeOverrideBuilderStrategy, + private val strategy: FakeOverrideBuilderStrategy, private val externalOverridabilityConditions: List, ) { private val overrideChecker = IrOverrideChecker(typeSystem, externalOverridabilityConditions) @@ -61,8 +55,11 @@ class IrOverridingUtil( } } + /** + * This function builds all fake overrides for [clazz] and computes overridden symbols for all its members. + */ fun buildFakeOverridesForClass(clazz: IrClass, oldSignatures: Boolean) { - fakeOverrideBuilder.inFile(clazz.fileOrNull) { + strategy.inFile(clazz.fileOrNull) { val superTypes = clazz.superTypes val fromCurrent = clazz.declarations.filterIsInstance() @@ -73,7 +70,7 @@ class IrOverridingUtil( .filter { it.isOverridableMemberOrAccessor() } .map { val overriddenMember = it as IrOverridableMember - val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz) + val fakeOverride = strategy.fakeOverrideMember(superType, overriddenMember, clazz) FakeOverride(fakeOverride, overriddenMember) } } @@ -91,6 +88,12 @@ class IrOverridingUtil( } } + /** + * This function builds all missing fake overrides, assuming that already existing members have correct overriden symbols. + * + * In particular, if a member of super class can be overridden, but none of the members have it in their overriddenSymbols, + * fake override would be created. + */ fun buildFakeOverridesForClassUsingOverriddenSymbols( clazz: IrClass, implementedMembers: List = emptyList(), @@ -108,7 +111,7 @@ class IrOverridingUtil( it !in overriddenMembers && it.symbol !in ignoredParentSymbols && !it.isStaticMember && !DescriptorVisibilities.isPrivate(it.visibility) } .map { overriddenMember -> - val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz) + val fakeOverride = strategy.fakeOverrideMember(superType, overriddenMember, clazz) FakeOverride(fakeOverride, overriddenMember) } } @@ -333,8 +336,8 @@ class IrOverridingUtil( ) { "Overridden symbols should be set for fake override ${fakeOverride.render()}" } addedFakeOverrides.add(fakeOverride) - fakeOverrideBuilder.linkFakeOverride(fakeOverride, compatibilityMode) - fakeOverrideBuilder.postProcessGeneratedFakeOverride(fakeOverride, currentClass) + strategy.linkFakeOverride(fakeOverride, compatibilityMode) + strategy.postProcessGeneratedFakeOverride(fakeOverride, currentClass) } private fun isVisibilityMoreSpecific( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/IrUnimplementedOverridesStrategy.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrUnimplementedOverridesStrategy.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/IrUnimplementedOverridesStrategy.kt rename to compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrUnimplementedOverridesStrategy.kt index ec1934fbf83..a1a185e1484 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/linkage/partial/IrUnimplementedOverridesStrategy.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrUnimplementedOverridesStrategy.kt @@ -1,15 +1,15 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.ir.linkage.partial +package org.jetbrains.kotlin.ir.overrides import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrOverridableDeclaration -import org.jetbrains.kotlin.ir.declarations.IrOverridableMember +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy.Customization.Companion.NO import org.jetbrains.kotlin.ir.symbols.IrSymbol interface IrUnimplementedOverridesStrategy { @@ -23,6 +23,6 @@ interface IrUnimplementedOverridesStrategy { fun > postProcessGeneratedFakeOverride(overridableMember: T, parent: IrClass) {} object ProcessAsFakeOverrides : IrUnimplementedOverridesStrategy { - override fun > computeCustomization(overridableMember: T, parent: IrClass) = Customization.NO + override fun > computeCustomization(overridableMember: T, parent: IrClass) = NO } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 886cefbf76a..3f5d7f11e0b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -17,9 +17,9 @@ import org.jetbrains.kotlin.ir.builders.irImplicitCast import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.overrides.FakeOverrideBuilderStrategy -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl @@ -1227,7 +1227,7 @@ val IrFunction.allParametersCount: Int private object BindToNewEmptySymbols : FakeOverrideBuilderStrategy( friendModules = emptyMap(), // TODO: this is probably not correct. Should be fixed by KT-61384. But it's not important for current usages - unimplementedOverridesStrategy = ProcessAsFakeOverrides + unimplementedOverridesStrategy = IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides ) { override fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) { function.acquireSymbol(IrSimpleFunctionSymbolImpl()) @@ -1258,7 +1258,7 @@ fun IrClass.addFakeOverrides( implementedMembers: List = emptyList(), ignoredParentSymbols: List = emptyList() ) { - IrOverridingUtil(typeSystem, BindToNewEmptySymbols, emptyList()) + IrFakeOverrideBuilder(typeSystem, BindToNewEmptySymbols, emptyList()) .buildFakeOverridesForClassUsingOverriddenSymbols(this, implementedMembers = implementedMembers, compatibilityMode = false, diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/IrUnimplementedOverridesStrategy.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/IrUnimplementedOverridesStrategy.kt index df914659715..7dbee8cf9db 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/IrUnimplementedOverridesStrategy.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/IrUnimplementedOverridesStrategy.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.linkage.partial import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.linkage.partial.PartiallyLinkedDeclarationOrigin +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.isNothing import org.jetbrains.kotlin.ir.util.collectRealOverrides diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt index f08d3476ddc..28149863a79 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt @@ -28,11 +28,11 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.builders.declarations.buildProperty import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy -import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides import org.jetbrains.kotlin.ir.overrides.FakeOverrideBuilderStrategy import org.jetbrains.kotlin.ir.overrides.IrExternalOverridabilityCondition -import org.jetbrains.kotlin.ir.overrides.IrOverridingUtil +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy +import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl @@ -254,7 +254,7 @@ class IrLinkerFakeOverrideProvider( }, externalOverridabilityConditions: List = emptyList(), ) { - private val irOverridingUtil = IrOverridingUtil( + private val irFakeOverrideBuilder = IrFakeOverrideBuilder( typeSystem, IrLinkerFakeOverrideBuilderStrategy( linker, @@ -291,7 +291,7 @@ class IrLinkerFakeOverrideProvider( if (!platformSpecificClassFilter.needToConstructFakeOverrides(clazz)) return false - irOverridingUtil.buildFakeOverridesForClass(clazz, compatibilityMode.oldSignatures) + irFakeOverrideBuilder.buildFakeOverridesForClass(clazz, compatibilityMode.oldSignatures) return true } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt index 1ddf5053b9c..16d3868a4f8 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl -import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.test.directives.CodegenTestDirectives import org.jetbrains.kotlin.test.model.* @@ -37,7 +36,7 @@ class IrActualizerAndPluginsFacade( typeSystemContext, testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings, inputArtifact.fir2IrComponents!!.symbolTable, - inputArtifact.fir2IrComponents!!.irOverridingUtil, + inputArtifact.fir2IrComponents!!.fakeOverrideBuilder, useIrFakeOverrideBuilder = CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives, expectActualTracker = null, )