[IR] Move IrGetValue.actualize() to IrUtils and rename it

^KT-62292
This commit is contained in:
Pavel Kunyavskiy
2023-11-14 13:37:04 +01:00
committed by Space Team
parent e80d4b1d60
commit 763d2ec2fe
5 changed files with 39 additions and 44 deletions
@@ -172,9 +172,9 @@ open class ExpectDeclarationRemover(val symbolTable: ReferenceSymbolTable, priva
.transform(object : IrElementTransformerVoid() {
override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid()
return expression.actualize(
classActualizer = { symbolTable.descriptorExtension.referenceClass(it.descriptor.findActualForExpect() as ClassDescriptor).owner },
functionActualizer = { symbolTable.referenceFunction(it.descriptor.findActualForExpect() as FunctionDescriptor).owner }
return expression.remapSymbolParent(
classRemapper = { symbolTable.descriptorExtension.referenceClass(it.descriptor.findActualForExpect() as ClassDescriptor).owner },
functionRemapper = { symbolTable.referenceFunction(it.descriptor.findActualForExpect() as FunctionDescriptor).owner }
)
}
}, data = null)
@@ -248,35 +248,4 @@ fun ParameterDescriptor.copyAsValueParameter(newOwner: CallableDescriptor, index
source = source
)
else -> throw Error("Unexpected parameter descriptor: $this")
}
fun IrGetValue.actualize(classActualizer: (IrClass) -> IrClass, functionActualizer: (IrFunction) -> IrFunction): IrGetValue {
val symbol = symbol
if (symbol !is IrValueParameterSymbol) {
return this
}
val parameter = symbol.owner
val newSymbol = when (val parent = parameter.parent) {
is IrClass -> {
assert(parameter == parent.thisReceiver)
classActualizer(parent).thisReceiver!!
}
is IrFunction -> {
val actualizedFunction = functionActualizer(parent)
when (parameter) {
parent.dispatchReceiverParameter -> actualizedFunction.dispatchReceiverParameter!!
parent.extensionReceiverParameter -> actualizedFunction.extensionReceiverParameter!!
else -> {
assert(parent.valueParameters[parameter.index] == parameter)
actualizedFunction.valueParameters[parameter.index]
}
}
}
else -> error(parent)
}
return IrGetValueImpl(startOffset, endOffset, newSymbol.type, newSymbol.symbol, origin)
}