[IrFakeOverrideBuilder] Do not compute signatures in Fir2IR
No one need them, while it requires significant time usage ^KT-66281 ^KT-66441 Fixed
This commit is contained in:
committed by
Space Team
parent
5779465366
commit
1222ef7fac
+26
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
||||
@@ -131,6 +133,30 @@ abstract class FakeOverrideBuilderStrategy(
|
||||
* * [IrFunctionWithLateBinding.acquireSymbol] must be called inside on getter and setter of [property] argument, if they exist
|
||||
*/
|
||||
protected abstract fun linkPropertyFakeOverride(property: IrPropertyWithLateBinding, manglerCompatibleMode: Boolean)
|
||||
|
||||
abstract class BindToPrivateSymbols(friendModules: Map<String, Collection<String>>) : FakeOverrideBuilderStrategy(
|
||||
friendModules = friendModules,
|
||||
unimplementedOverridesStrategy = IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides
|
||||
) {
|
||||
override fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) {
|
||||
function.acquireSymbol(IrSimpleFunctionSymbolImpl())
|
||||
}
|
||||
|
||||
override fun linkPropertyFakeOverride(property: IrPropertyWithLateBinding, manglerCompatibleMode: Boolean) {
|
||||
property.acquireSymbol(IrPropertySymbolImpl())
|
||||
|
||||
property.getter?.let {
|
||||
it.correspondingPropertySymbol = property.symbol
|
||||
linkFunctionFakeOverride(it as? IrFunctionWithLateBinding ?: error("Unexpected fake override getter: $it"), manglerCompatibleMode)
|
||||
}
|
||||
property.setter?.let {
|
||||
it.correspondingPropertySymbol = property.symbol
|
||||
linkFunctionFakeOverride(it as? IrFunctionWithLateBinding ?: error("Unexpected fake override setter: $it"), manglerCompatibleMode)
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R> inFile(file: IrFile?, block: () -> R): R = block()
|
||||
}
|
||||
}
|
||||
|
||||
fun buildFakeOverrideMember(
|
||||
|
||||
@@ -1280,40 +1280,16 @@ val IrFunction.allParameters: List<IrValueParameter>
|
||||
val IrFunction.allParametersCount: Int
|
||||
get() = if (this is IrConstructor) explicitParametersCount + 1 else explicitParametersCount
|
||||
|
||||
private object BindToNewEmptySymbols : FakeOverrideBuilderStrategy(
|
||||
private object LoweringsFakeOverrideBuilderStrategy : FakeOverrideBuilderStrategy.BindToPrivateSymbols(
|
||||
friendModules = emptyMap(), // TODO: this is probably not correct. Should be fixed by KT-61384. But it's not important for current usages
|
||||
unimplementedOverridesStrategy = IrUnimplementedOverridesStrategy.ProcessAsFakeOverrides
|
||||
) {
|
||||
override fun linkFunctionFakeOverride(function: IrFunctionWithLateBinding, manglerCompatibleMode: Boolean) {
|
||||
function.acquireSymbol(IrSimpleFunctionSymbolImpl())
|
||||
}
|
||||
|
||||
override fun linkPropertyFakeOverride(property: IrPropertyWithLateBinding, manglerCompatibleMode: Boolean) {
|
||||
val propertySymbol = IrPropertySymbolImpl()
|
||||
property.getter?.let { it.correspondingPropertySymbol = propertySymbol }
|
||||
property.setter?.let { it.correspondingPropertySymbol = propertySymbol }
|
||||
|
||||
property.acquireSymbol(propertySymbol)
|
||||
|
||||
property.getter?.let {
|
||||
it.correspondingPropertySymbol = property.symbol
|
||||
linkFunctionFakeOverride(it as? IrFunctionWithLateBinding ?: error("Unexpected fake override getter: $it"), manglerCompatibleMode)
|
||||
}
|
||||
property.setter?.let {
|
||||
it.correspondingPropertySymbol = property.symbol
|
||||
linkFunctionFakeOverride(it as? IrFunctionWithLateBinding ?: error("Unexpected fake override setter: $it"), manglerCompatibleMode)
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R> inFile(file: IrFile?, block: () -> R): R = block()
|
||||
}
|
||||
)
|
||||
|
||||
fun IrClass.addFakeOverrides(
|
||||
typeSystem: IrTypeSystemContext,
|
||||
implementedMembers: List<IrOverridableMember> = emptyList(),
|
||||
ignoredParentSymbols: List<IrSymbol> = emptyList()
|
||||
) {
|
||||
val fakeOverrides = IrFakeOverrideBuilder(typeSystem, BindToNewEmptySymbols, emptyList())
|
||||
val fakeOverrides = IrFakeOverrideBuilder(typeSystem, LoweringsFakeOverrideBuilderStrategy, emptyList())
|
||||
.buildFakeOverridesForClassUsingOverriddenSymbols(this, implementedMembers, compatibilityMode = false, ignoredParentSymbols)
|
||||
for (fakeOverride in fakeOverrides) {
|
||||
addChild(fakeOverride)
|
||||
|
||||
Reference in New Issue
Block a user