IR: minor refactoring in FakeOverrideRebuilder
Extract the common logic of remapping fake overrides into a function. Also, slightly change behavior of the check to be stricter: now it's using `as S?` instead of `as? S`, which means that if the remapped symbol is present in `fakeOverridesMap`, then it must be of the same type.
This commit is contained in:
committed by
Space Team
parent
4da7453a7b
commit
a80e1e2d09
+13
-16
@@ -14,8 +14,6 @@ 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.IrFakeOverrideBuilder
|
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.IrSimpleFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.getClass
|
import org.jetbrains.kotlin.ir.types.getClass
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
@@ -206,39 +204,38 @@ private class RemapFakeOverridesVisitor(val fakeOverridesMap: Map<IrSymbol, IrSy
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
|
override fun visitSimpleFunction(declaration: IrSimpleFunction) {
|
||||||
declaration.overriddenSymbols = declaration.overriddenSymbols.map {
|
declaration.overriddenSymbols = declaration.overriddenSymbols.map { it.remap() }
|
||||||
(fakeOverridesMap[it] as? IrSimpleFunctionSymbol) ?: it
|
|
||||||
}
|
|
||||||
declaration.acceptChildrenVoid(this)
|
declaration.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(declaration: IrProperty) {
|
override fun visitProperty(declaration: IrProperty) {
|
||||||
declaration.overriddenSymbols = declaration.overriddenSymbols.map {
|
declaration.overriddenSymbols = declaration.overriddenSymbols.map { it.remap() }
|
||||||
(fakeOverridesMap[it] as? IrPropertySymbol) ?: it
|
|
||||||
}
|
|
||||||
declaration.acceptChildrenVoid(this)
|
declaration.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitCall(expression: IrCall) {
|
override fun visitCall(expression: IrCall) {
|
||||||
expression.symbol = (fakeOverridesMap[expression.symbol] as? IrSimpleFunctionSymbol) ?: expression.symbol
|
expression.symbol = expression.symbol.remap()
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFunctionReference(expression: IrFunctionReference) {
|
override fun visitFunctionReference(expression: IrFunctionReference) {
|
||||||
expression.symbol = (fakeOverridesMap[expression.symbol] as? IrSimpleFunctionSymbol) ?: expression.symbol
|
expression.symbol = expression.symbol.remap()
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPropertyReference(expression: IrPropertyReference) {
|
override fun visitPropertyReference(expression: IrPropertyReference) {
|
||||||
expression.symbol = (fakeOverridesMap[expression.symbol] as? IrPropertySymbol) ?: expression.symbol
|
expression.symbol = expression.symbol.remap()
|
||||||
expression.getter = (expression.getter?.let { fakeOverridesMap[it] } as? IrSimpleFunctionSymbol) ?: expression.getter
|
expression.getter = expression.getter?.remap()
|
||||||
expression.setter = (expression.setter?.let { fakeOverridesMap[it] } as? IrSimpleFunctionSymbol) ?: expression.setter
|
expression.setter = expression.setter?.remap()
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) {
|
override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) {
|
||||||
expression.getter = (fakeOverridesMap[expression.getter] as? IrSimpleFunctionSymbol) ?: expression.getter
|
expression.getter = expression.getter.remap()
|
||||||
expression.setter = (expression.setter?.let { fakeOverridesMap[it] } as? IrSimpleFunctionSymbol) ?: expression.setter
|
expression.setter = expression.setter?.remap()
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private inline fun <reified S : IrSymbol> S.remap(): S =
|
||||||
|
fakeOverridesMap[this] as S? ?: this
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user