[IR] Rename classes after refactoring
^KT-61934
This commit is contained in:
committed by
Space Team
parent
ed7e458828
commit
03914e353f
@@ -168,7 +168,7 @@ fun FirResult.convertToIrAndActualize(
|
|||||||
actualizerTypeContextProvider(fir2IrResult.irModuleFragment.irBuiltins),
|
actualizerTypeContextProvider(fir2IrResult.irModuleFragment.irBuiltins),
|
||||||
fir2IrConfiguration.languageVersionSettings,
|
fir2IrConfiguration.languageVersionSettings,
|
||||||
commonMemberStorage.symbolTable,
|
commonMemberStorage.symbolTable,
|
||||||
fir2IrResult.components.irOverridingUtil,
|
fir2IrResult.components.fakeOverrideBuilder,
|
||||||
fir2IrConfiguration.useIrFakeOverrideBuilder,
|
fir2IrConfiguration.useIrFakeOverrideBuilder,
|
||||||
fir2IrConfiguration.expectActualTracker,
|
fir2IrConfiguration.expectActualTracker,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer
|
|||||||
import org.jetbrains.kotlin.ir.IrLock
|
import org.jetbrains.kotlin.ir.IrLock
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
import org.jetbrains.kotlin.ir.linkage.IrProvider
|
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
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
|
|
||||||
interface Fir2IrComponents {
|
interface Fir2IrComponents {
|
||||||
@@ -43,7 +43,7 @@ interface Fir2IrComponents {
|
|||||||
val callGenerator: CallAndReferenceGenerator
|
val callGenerator: CallAndReferenceGenerator
|
||||||
val fakeOverrideGenerator: FakeOverrideGenerator
|
val fakeOverrideGenerator: FakeOverrideGenerator
|
||||||
val delegatedMemberGenerator: DelegatedMemberGenerator
|
val delegatedMemberGenerator: DelegatedMemberGenerator
|
||||||
val irOverridingUtil: IrOverridingUtil
|
val fakeOverrideBuilder: IrFakeOverrideBuilder
|
||||||
|
|
||||||
val extensions: Fir2IrExtensions
|
val extensions: Fir2IrExtensions
|
||||||
val configuration: Fir2IrConfiguration
|
val configuration: Fir2IrConfiguration
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.IrBuiltIns
|
|||||||
import org.jetbrains.kotlin.ir.IrLock
|
import org.jetbrains.kotlin.ir.IrLock
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
import org.jetbrains.kotlin.ir.linkage.IrProvider
|
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.KotlinMangler
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ class Fir2IrComponentsStorage(
|
|||||||
override val extensions: Fir2IrExtensions,
|
override val extensions: Fir2IrExtensions,
|
||||||
override val configuration: Fir2IrConfiguration,
|
override val configuration: Fir2IrConfiguration,
|
||||||
override val visibilityConverter: Fir2IrVisibilityConverter,
|
override val visibilityConverter: Fir2IrVisibilityConverter,
|
||||||
irOverridingUtilProvider: (IrBuiltIns) -> IrOverridingUtil,
|
irFakeOverrideBuilderProvider: (IrBuiltIns) -> IrFakeOverrideBuilder,
|
||||||
moduleDescriptor: FirModuleDescriptor,
|
moduleDescriptor: FirModuleDescriptor,
|
||||||
commonMemberStorage: Fir2IrCommonMemberStorage,
|
commonMemberStorage: Fir2IrCommonMemberStorage,
|
||||||
irMangler: KotlinMangler.IrMangler,
|
irMangler: KotlinMangler.IrMangler,
|
||||||
@@ -49,7 +49,7 @@ class Fir2IrComponentsStorage(
|
|||||||
this, configuration.languageVersionSettings, moduleDescriptor, irMangler
|
this, configuration.languageVersionSettings, moduleDescriptor, irMangler
|
||||||
)
|
)
|
||||||
override val builtIns: Fir2IrBuiltIns = Fir2IrBuiltIns(this, specialSymbolProvider)
|
override val builtIns: Fir2IrBuiltIns = Fir2IrBuiltIns(this, specialSymbolProvider)
|
||||||
override val irOverridingUtil: IrOverridingUtil = irOverridingUtilProvider(irBuiltIns)
|
override val fakeOverrideBuilder: IrFakeOverrideBuilder = irFakeOverrideBuilderProvider(irBuiltIns)
|
||||||
|
|
||||||
override val irProviders: List<IrProvider> = listOf(FirIrProvider(this))
|
override val irProviders: List<IrProvider> = listOf(FirIrProvider(this))
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration
|
|||||||
import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment
|
import org.jetbrains.kotlin.ir.interpreter.IrInterpreterEnvironment
|
||||||
import org.jetbrains.kotlin.ir.interpreter.checker.EvaluationMode
|
import org.jetbrains.kotlin.ir.interpreter.checker.EvaluationMode
|
||||||
import org.jetbrains.kotlin.ir.interpreter.transformer.transformConst
|
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.types.IrTypeSystemContext
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorPublicSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorPublicSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl
|
||||||
@@ -558,7 +558,7 @@ class Fir2IrConverter(
|
|||||||
val components = Fir2IrComponentsStorage(
|
val components = Fir2IrComponentsStorage(
|
||||||
session, scopeSession, irFactory, fir2IrExtensions, fir2IrConfiguration, visibilityConverter,
|
session, scopeSession, irFactory, fir2IrExtensions, fir2IrConfiguration, visibilityConverter,
|
||||||
{ irBuiltins ->
|
{ irBuiltins ->
|
||||||
IrOverridingUtil(
|
IrFakeOverrideBuilder(
|
||||||
typeContextProvider(irBuiltins),
|
typeContextProvider(irBuiltins),
|
||||||
Fir2IrFakeOverrideStrategy(friendModulesMap(session), commonMemberStorage.symbolTable, irMangler),
|
Fir2IrFakeOverrideStrategy(friendModulesMap(session), commonMemberStorage.symbolTable, irMangler),
|
||||||
externalOverridabilityConditions = emptyList(), // TODO: KT-61370, KT-61804.
|
externalOverridabilityConditions = emptyList(), // TODO: KT-61370, KT-61804.
|
||||||
@@ -583,7 +583,7 @@ class Fir2IrConverter(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (fir2IrConfiguration.useIrFakeOverrideBuilder) {
|
if (fir2IrConfiguration.useIrFakeOverrideBuilder) {
|
||||||
FakeOverrideRebuilder(commonMemberStorage.symbolTable, components.irOverridingUtil).rebuildFakeOverrides(irModuleFragment)
|
FakeOverrideRebuilder(commonMemberStorage.symbolTable, components.fakeOverrideBuilder).rebuildFakeOverrides(irModuleFragment)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Fir2IrResult(irModuleFragment, components, moduleDescriptor)
|
return Fir2IrResult(irModuleFragment, components, moduleDescriptor)
|
||||||
|
|||||||
+1
-1
@@ -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.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunctionWithLateBinding
|
import org.jetbrains.kotlin.ir.declarations.IrFunctionWithLateBinding
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrPropertyWithLateBinding
|
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.FakeOverrideBuilderStrategy
|
||||||
|
import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertyPublicSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertyPublicSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionPublicSymbolImpl
|
||||||
|
|||||||
+3
-3
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
|
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference
|
import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrPropertyReference
|
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.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
@@ -52,7 +52,7 @@ import org.jetbrains.kotlin.utils.newHashSetWithExpectedSize
|
|||||||
*/
|
*/
|
||||||
class FakeOverrideRebuilder(
|
class FakeOverrideRebuilder(
|
||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val irOverridingUtil: IrOverridingUtil,
|
val fakeOverrideBuilder: IrFakeOverrideBuilder,
|
||||||
) {
|
) {
|
||||||
private val removedFakeOverrides = mutableMapOf<IrClassSymbol, List<IrSymbol>>()
|
private val removedFakeOverrides = mutableMapOf<IrClassSymbol, List<IrSymbol>>()
|
||||||
private val processedClasses = hashSetOf<IrClass>()
|
private val processedClasses = hashSetOf<IrClass>()
|
||||||
@@ -115,7 +115,7 @@ class FakeOverrideRebuilder(
|
|||||||
for (c in irClass.superTypes) {
|
for (c in irClass.superTypes) {
|
||||||
c.getClass()?.let { rebuildClassFakeOverrides(it) }
|
c.getClass()?.let { rebuildClassFakeOverrides(it) }
|
||||||
}
|
}
|
||||||
irOverridingUtil.buildFakeOverridesForClass(irClass, false)
|
fakeOverrideBuilder.buildFakeOverridesForClass(irClass, false)
|
||||||
|
|
||||||
val overriddenMap = mutableMapOf<IrSymbol, IrSymbol>()
|
val overriddenMap = mutableMapOf<IrSymbol, IrSymbol>()
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
|
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
@@ -27,7 +27,7 @@ object IrActualizer {
|
|||||||
typeSystemContext: IrTypeSystemContext,
|
typeSystemContext: IrTypeSystemContext,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
symbolTable: SymbolTable,
|
symbolTable: SymbolTable,
|
||||||
irOverridingUtil: IrOverridingUtil,
|
fakeOverrideBuilder: IrFakeOverrideBuilder,
|
||||||
useIrFakeOverrideBuilder: Boolean,
|
useIrFakeOverrideBuilder: Boolean,
|
||||||
expectActualTracker: ExpectActualTracker?
|
expectActualTracker: ExpectActualTracker?
|
||||||
): IrActualizedResult {
|
): IrActualizedResult {
|
||||||
@@ -79,7 +79,7 @@ object IrActualizer {
|
|||||||
|
|
||||||
if (useIrFakeOverrideBuilder) {
|
if (useIrFakeOverrideBuilder) {
|
||||||
// 8. Rebuild fake overrides from stretch, as they could become invalid during actualization
|
// 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)
|
return IrActualizedResult(removedExpectDeclarations)
|
||||||
|
|||||||
-1
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.ir.declarations.IrClass
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrOverridableMember
|
import org.jetbrains.kotlin.ir.declarations.IrOverridableMember
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
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.IrClassifierSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
|
|||||||
+49
-1
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
|||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
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.ir.util.render
|
||||||
import org.jetbrains.kotlin.types.Variance
|
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(
|
abstract class FakeOverrideBuilderStrategy(
|
||||||
private val friendModules: Map<String, Collection<String>>,
|
private val friendModules: Map<String, Collection<String>>,
|
||||||
private val unimplementedOverridesStrategy: IrUnimplementedOverridesStrategy
|
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 =
|
fun fakeOverrideMember(superType: IrType, member: IrOverridableMember, clazz: IrClass): IrOverridableMember =
|
||||||
buildFakeOverrideMember(superType, member, clazz, friendModules, unimplementedOverridesStrategy)
|
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) {
|
fun postProcessGeneratedFakeOverride(fakeOverride: IrOverridableMember, clazz: IrClass) {
|
||||||
unimplementedOverridesStrategy.postProcessGeneratedFakeOverride(fakeOverride as IrOverridableDeclaration<*>, clazz)
|
unimplementedOverridesStrategy.postProcessGeneratedFakeOverride(fakeOverride as IrOverridableDeclaration<*>, clazz)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a symbol for the fake override.
|
||||||
|
*/
|
||||||
fun linkFakeOverride(fakeOverride: IrOverridableMember, compatibilityMode: Boolean) {
|
fun linkFakeOverride(fakeOverride: IrOverridableMember, compatibilityMode: Boolean) {
|
||||||
when (fakeOverride) {
|
when (fakeOverride) {
|
||||||
is IrFunctionWithLateBinding -> linkFunctionFakeOverride(fakeOverride, compatibilityMode)
|
is IrFunctionWithLateBinding -> linkFunctionFakeOverride(fakeOverride, compatibilityMode)
|
||||||
@@ -40,9 +62,35 @@ abstract class FakeOverrideBuilderStrategy(
|
|||||||
else -> error("Unexpected fake override: $fakeOverride")
|
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)
|
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)
|
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)
|
protected abstract fun linkPropertyFakeOverride(property: IrPropertyWithLateBinding, manglerCompatibleMode: Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.ir.overrides
|
package org.jetbrains.kotlin.ir.overrides
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.linkage.partial.IrUnimplementedOverridesStrategy
|
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
|
|
||||||
class FakeOverrideCopier(
|
class FakeOverrideCopier(
|
||||||
|
|||||||
+16
-13
@@ -23,15 +23,9 @@ import org.jetbrains.kotlin.utils.filterIsInstanceAnd
|
|||||||
import org.jetbrains.kotlin.utils.memoryOptimizedMap
|
import org.jetbrains.kotlin.utils.memoryOptimizedMap
|
||||||
import org.jetbrains.kotlin.utils.memoryOptimizedMapNotNull
|
import org.jetbrains.kotlin.utils.memoryOptimizedMapNotNull
|
||||||
|
|
||||||
// TODO:
|
class IrFakeOverrideBuilder(
|
||||||
// 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(
|
|
||||||
private val typeSystem: IrTypeSystemContext,
|
private val typeSystem: IrTypeSystemContext,
|
||||||
private val fakeOverrideBuilder: FakeOverrideBuilderStrategy,
|
private val strategy: FakeOverrideBuilderStrategy,
|
||||||
private val externalOverridabilityConditions: List<IrExternalOverridabilityCondition>,
|
private val externalOverridabilityConditions: List<IrExternalOverridabilityCondition>,
|
||||||
) {
|
) {
|
||||||
private val overrideChecker = IrOverrideChecker(typeSystem, externalOverridabilityConditions)
|
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) {
|
fun buildFakeOverridesForClass(clazz: IrClass, oldSignatures: Boolean) {
|
||||||
fakeOverrideBuilder.inFile(clazz.fileOrNull) {
|
strategy.inFile(clazz.fileOrNull) {
|
||||||
val superTypes = clazz.superTypes
|
val superTypes = clazz.superTypes
|
||||||
|
|
||||||
val fromCurrent = clazz.declarations.filterIsInstance<IrOverridableMember>()
|
val fromCurrent = clazz.declarations.filterIsInstance<IrOverridableMember>()
|
||||||
@@ -73,7 +70,7 @@ class IrOverridingUtil(
|
|||||||
.filter { it.isOverridableMemberOrAccessor() }
|
.filter { it.isOverridableMemberOrAccessor() }
|
||||||
.map {
|
.map {
|
||||||
val overriddenMember = it as IrOverridableMember
|
val overriddenMember = it as IrOverridableMember
|
||||||
val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz)
|
val fakeOverride = strategy.fakeOverrideMember(superType, overriddenMember, clazz)
|
||||||
FakeOverride(fakeOverride, overriddenMember)
|
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(
|
fun buildFakeOverridesForClassUsingOverriddenSymbols(
|
||||||
clazz: IrClass,
|
clazz: IrClass,
|
||||||
implementedMembers: List<IrOverridableMember> = emptyList(),
|
implementedMembers: List<IrOverridableMember> = emptyList(),
|
||||||
@@ -108,7 +111,7 @@ class IrOverridingUtil(
|
|||||||
it !in overriddenMembers && it.symbol !in ignoredParentSymbols && !it.isStaticMember && !DescriptorVisibilities.isPrivate(it.visibility)
|
it !in overriddenMembers && it.symbol !in ignoredParentSymbols && !it.isStaticMember && !DescriptorVisibilities.isPrivate(it.visibility)
|
||||||
}
|
}
|
||||||
.map { overriddenMember ->
|
.map { overriddenMember ->
|
||||||
val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz)
|
val fakeOverride = strategy.fakeOverrideMember(superType, overriddenMember, clazz)
|
||||||
FakeOverride(fakeOverride, overriddenMember)
|
FakeOverride(fakeOverride, overriddenMember)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,8 +336,8 @@ class IrOverridingUtil(
|
|||||||
) { "Overridden symbols should be set for fake override ${fakeOverride.render()}" }
|
) { "Overridden symbols should be set for fake override ${fakeOverride.render()}" }
|
||||||
|
|
||||||
addedFakeOverrides.add(fakeOverride)
|
addedFakeOverrides.add(fakeOverride)
|
||||||
fakeOverrideBuilder.linkFakeOverride(fakeOverride, compatibilityMode)
|
strategy.linkFakeOverride(fakeOverride, compatibilityMode)
|
||||||
fakeOverrideBuilder.postProcessGeneratedFakeOverride(fakeOverride, currentClass)
|
strategy.postProcessGeneratedFakeOverride(fakeOverride, currentClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isVisibilityMoreSpecific(
|
private fun isVisibilityMoreSpecific(
|
||||||
+4
-4
@@ -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.
|
* 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.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrOverridableDeclaration
|
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
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
|
|
||||||
interface IrUnimplementedOverridesStrategy {
|
interface IrUnimplementedOverridesStrategy {
|
||||||
@@ -23,6 +23,6 @@ interface IrUnimplementedOverridesStrategy {
|
|||||||
fun <S : IrSymbol, T : IrOverridableDeclaration<S>> postProcessGeneratedFakeOverride(overridableMember: T, parent: IrClass) {}
|
fun <S : IrSymbol, T : IrOverridableDeclaration<S>> postProcessGeneratedFakeOverride(overridableMember: T, parent: IrClass) {}
|
||||||
|
|
||||||
object ProcessAsFakeOverrides : IrUnimplementedOverridesStrategy {
|
object ProcessAsFakeOverrides : IrUnimplementedOverridesStrategy {
|
||||||
override fun <S : IrSymbol, T : IrOverridableDeclaration<S>> computeCustomization(overridableMember: T, parent: IrClass) = Customization.NO
|
override fun <S : IrSymbol, T : IrOverridableDeclaration<S>> computeCustomization(overridableMember: T, parent: IrClass) = NO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,9 +17,9 @@ import org.jetbrains.kotlin.ir.builders.irImplicitCast
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
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.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.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||||
@@ -1227,7 +1227,7 @@ val IrFunction.allParametersCount: Int
|
|||||||
|
|
||||||
private object BindToNewEmptySymbols : FakeOverrideBuilderStrategy(
|
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
|
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) {
|
override fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) {
|
||||||
function.acquireSymbol(IrSimpleFunctionSymbolImpl())
|
function.acquireSymbol(IrSimpleFunctionSymbolImpl())
|
||||||
@@ -1258,7 +1258,7 @@ fun IrClass.addFakeOverrides(
|
|||||||
implementedMembers: List<IrOverridableMember> = emptyList(),
|
implementedMembers: List<IrOverridableMember> = emptyList(),
|
||||||
ignoredParentSymbols: List<IrSymbol> = emptyList()
|
ignoredParentSymbols: List<IrSymbol> = emptyList()
|
||||||
) {
|
) {
|
||||||
IrOverridingUtil(typeSystem, BindToNewEmptySymbols, emptyList())
|
IrFakeOverrideBuilder(typeSystem, BindToNewEmptySymbols, emptyList())
|
||||||
.buildFakeOverridesForClassUsingOverriddenSymbols(this,
|
.buildFakeOverridesForClassUsingOverriddenSymbols(this,
|
||||||
implementedMembers = implementedMembers,
|
implementedMembers = implementedMembers,
|
||||||
compatibilityMode = false,
|
compatibilityMode = false,
|
||||||
|
|||||||
+1
-1
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.linkage.partial
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.linkage.partial.PartiallyLinkedDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.overrides.IrUnimplementedOverridesStrategy
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.isNothing
|
import org.jetbrains.kotlin.ir.types.isNothing
|
||||||
import org.jetbrains.kotlin.ir.util.collectRealOverrides
|
import org.jetbrains.kotlin.ir.util.collectRealOverrides
|
||||||
|
|||||||
+5
-5
@@ -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.buildProperty
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.FakeOverrideBuilderStrategy
|
||||||
import org.jetbrains.kotlin.ir.overrides.IrExternalOverridabilityCondition
|
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.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||||
@@ -254,7 +254,7 @@ class IrLinkerFakeOverrideProvider(
|
|||||||
},
|
},
|
||||||
externalOverridabilityConditions: List<IrExternalOverridabilityCondition> = emptyList(),
|
externalOverridabilityConditions: List<IrExternalOverridabilityCondition> = emptyList(),
|
||||||
) {
|
) {
|
||||||
private val irOverridingUtil = IrOverridingUtil(
|
private val irFakeOverrideBuilder = IrFakeOverrideBuilder(
|
||||||
typeSystem,
|
typeSystem,
|
||||||
IrLinkerFakeOverrideBuilderStrategy(
|
IrLinkerFakeOverrideBuilderStrategy(
|
||||||
linker,
|
linker,
|
||||||
@@ -291,7 +291,7 @@ class IrLinkerFakeOverrideProvider(
|
|||||||
|
|
||||||
if (!platformSpecificClassFilter.needToConstructFakeOverrides(clazz)) return false
|
if (!platformSpecificClassFilter.needToConstructFakeOverrides(clazz)) return false
|
||||||
|
|
||||||
irOverridingUtil.buildFakeOverridesForClass(clazz, compatibilityMode.oldSignatures)
|
irFakeOverrideBuilder.buildFakeOverridesForClass(clazz, compatibilityMode.oldSignatures)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
|||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
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.platform.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.*
|
||||||
@@ -37,7 +36,7 @@ class IrActualizerAndPluginsFacade(
|
|||||||
typeSystemContext,
|
typeSystemContext,
|
||||||
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings,
|
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings,
|
||||||
inputArtifact.fir2IrComponents!!.symbolTable,
|
inputArtifact.fir2IrComponents!!.symbolTable,
|
||||||
inputArtifact.fir2IrComponents!!.irOverridingUtil,
|
inputArtifact.fir2IrComponents!!.fakeOverrideBuilder,
|
||||||
useIrFakeOverrideBuilder = CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives,
|
useIrFakeOverrideBuilder = CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives,
|
||||||
expectActualTracker = null,
|
expectActualTracker = null,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user