IR: remove usages of SymbolRenamer

Its only implementation was DEFAULT so now it's inlined.
This commit is contained in:
Alexander Udalov
2024-03-07 12:11:02 +01:00
committed by Space Team
parent be4e81fbce
commit d659b76de5
4 changed files with 36 additions and 44 deletions
@@ -8,7 +8,10 @@ package org.jetbrains.kotlin.backend.common.actualizer
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
import org.jetbrains.kotlin.ir.util.SymbolRemapper
import org.jetbrains.kotlin.ir.util.TypeRemapper
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.utils.memoryOptimizedMap
internal class ActualizerSymbolRemapper(private val expectActualMap: Map<IrSymbol, IrSymbol>) : SymbolRemapper {
@@ -74,7 +77,7 @@ internal class ActualizerSymbolRemapper(private val expectActualMap: Map<IrSymbo
}
internal open class ActualizerVisitor(private val symbolRemapper: SymbolRemapper, typeRemapper: TypeRemapper) :
DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, SymbolRenamer.DEFAULT) {
DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) {
// We shouldn't touch attributes, because Fir2Ir wouldn't set them to anything meaningful anyway.
// So it would be better to have them as is, i.e. referring to `this`, not some random node removed from the tree
@@ -12,57 +12,43 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.memoryOptimizedMap
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
initialParent: IrDeclarationParent? = null,
createCopier: (SymbolRemapper, TypeRemapper) -> DeepCopyIrTreeWithSymbols = ::DeepCopyIrTreeWithSymbols
createCopier: (SymbolRemapper, TypeRemapper) -> DeepCopyIrTreeWithSymbols =
{ symbolRemapper, typeRemapper -> DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) },
): T = deepCopyWithSymbols(initialParent, DeepCopySymbolRemapper(), createCopier)
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
initialParent: IrDeclarationParent?,
symbolRemapper: DeepCopySymbolRemapper,
createCopier: (SymbolRemapper, TypeRemapper) -> DeepCopyIrTreeWithSymbols = ::DeepCopyIrTreeWithSymbols
createCopier: (SymbolRemapper, TypeRemapper) -> DeepCopyIrTreeWithSymbols =
{ symbolRemapper, typeRemapper -> DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) },
): T {
acceptVoid(symbolRemapper)
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
return transform(createCopier(symbolRemapper, typeRemapper), null).patchDeclarationParents(initialParent) as T
}
interface SymbolRenamer {
fun getClassName(symbol: IrClassSymbol): Name = symbol.owner.name
fun getFunctionName(symbol: IrSimpleFunctionSymbol): Name = symbol.owner.name
fun getFieldName(symbol: IrFieldSymbol): Name = symbol.owner.name
fun getFileName(symbol: IrFileSymbol): FqName = symbol.owner.packageFqName
fun getExternalPackageFragmentName(symbol: IrExternalPackageFragmentSymbol): FqName = symbol.owner.packageFqName
fun getEnumEntryName(symbol: IrEnumEntrySymbol): Name = symbol.owner.name
fun getVariableName(symbol: IrVariableSymbol): Name = symbol.owner.name
fun getTypeParameterName(symbol: IrTypeParameterSymbol): Name = symbol.owner.name
fun getValueParameterName(symbol: IrValueParameterSymbol): Name = symbol.owner.name
fun getTypeAliasName(symbol: IrTypeAliasSymbol): Name = symbol.owner.name
object DEFAULT : SymbolRenamer
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
open class DeepCopyIrTreeWithSymbols(
private val symbolRemapper: SymbolRemapper,
private val typeRemapper: TypeRemapper,
private val symbolRenamer: SymbolRenamer
// This parameter is not used meaningfully, but is left for compatibility with compose.
@Suppress("UNUSED_PARAMETER") symbolRenamer: SymbolRenamer? = null,
) : IrElementTransformerVoid() {
private var transformedModule: IrModuleFragment? = null
constructor(symbolRemapper: SymbolRemapper, typeRemapper: TypeRemapper) : this(symbolRemapper, typeRemapper, SymbolRenamer.DEFAULT)
init {
// TODO refactor
(typeRemapper as? DeepCopyTypeRemapper)?.let {
@@ -107,7 +93,7 @@ open class DeepCopyIrTreeWithSymbols(
override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment): IrExternalPackageFragment =
IrExternalPackageFragmentImpl(
symbolRemapper.getDeclaredExternalPackageFragment(declaration.symbol),
symbolRenamer.getExternalPackageFragmentName(declaration.symbol)
declaration.packageFqName
).apply {
declaration.transformDeclarationsTo(this)
}
@@ -116,7 +102,7 @@ open class DeepCopyIrTreeWithSymbols(
IrFileImpl(
declaration.fileEntry,
symbolRemapper.getDeclaredFile(declaration.symbol),
symbolRenamer.getFileName(declaration.symbol),
declaration.packageFqName,
transformedModule ?: declaration.module
).apply {
transformAnnotations(declaration)
@@ -150,7 +136,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getClassName(declaration.symbol),
name = declaration.name,
visibility = declaration.visibility,
symbol = symbolRemapper.getDeclaredClass(declaration.symbol),
kind = declaration.kind,
@@ -183,7 +169,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getFunctionName(declaration.symbol),
name = declaration.name,
visibility = declaration.visibility,
isInline = declaration.isInline,
isExpect = declaration.isExpect,
@@ -279,7 +265,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getFieldName(declaration.symbol),
name = declaration.name,
visibility = declaration.visibility,
symbol = symbolRemapper.getDeclaredField(declaration.symbol),
type = declaration.type.remapType(),
@@ -312,7 +298,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getEnumEntryName(declaration.symbol),
name = declaration.name,
symbol = symbolRemapper.getDeclaredEnumEntry(declaration.symbol),
).apply {
transformAnnotations(declaration)
@@ -335,7 +321,7 @@ open class DeepCopyIrTreeWithSymbols(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredVariable(declaration.symbol),
symbolRenamer.getVariableName(declaration.symbol),
declaration.name,
declaration.type.remapType(),
declaration.isVar,
declaration.isConst,
@@ -356,7 +342,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getTypeParameterName(declaration.symbol),
name = declaration.name,
symbol = symbolRemapper.getDeclaredTypeParameter(declaration.symbol),
variance = declaration.variance,
index = declaration.index,
@@ -384,7 +370,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getValueParameterName(declaration.symbol),
name = declaration.name,
type = declaration.type.remapType(),
isAssignable = declaration.isAssignable,
symbol = symbolRemapper.getDeclaredValueParameter(declaration.symbol),
@@ -403,7 +389,7 @@ open class DeepCopyIrTreeWithSymbols(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getTypeAliasName(declaration.symbol),
name = declaration.name,
visibility = declaration.visibility,
symbol = symbolRemapper.getDeclaredTypeAlias(declaration.symbol),
isActual = declaration.isActual,
@@ -16,15 +16,12 @@ fun <T : IrElement> T.deepCopySavingMetadata(
acceptVoid(symbolRemapper)
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
@Suppress("UNCHECKED_CAST")
return transform(DeepCopySavingMetadata(symbolRemapper, typeRemapper, SymbolRenamer.DEFAULT), null)
return transform(DeepCopySavingMetadata(symbolRemapper, typeRemapper), null)
.patchDeclarationParents(initialParent) as T
}
private class DeepCopySavingMetadata(
symbolRemapper: SymbolRemapper,
typeRemapper: TypeRemapper,
symbolRenamer: SymbolRenamer
) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) {
private class DeepCopySavingMetadata(symbolRemapper: SymbolRemapper, typeRemapper: TypeRemapper) :
DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) {
override fun visitFile(declaration: IrFile): IrFile =
super.visitFile(declaration).apply {
metadata = declaration.metadata
@@ -60,4 +57,4 @@ private class DeepCopySavingMetadata(
super.visitLocalDelegatedProperty(declaration).apply {
metadata = declaration.metadata
}
}
}
@@ -62,4 +62,10 @@ fun DumpIrTreeVisitor(out: Appendable, normalizeNames: Boolean = false, stableOr
DeprecationLevel.ERROR,
)
fun RenderIrElementVisitor(normalizeNames: Boolean = false, verboseErrorTypes: Boolean = true) =
RenderIrElementVisitor(DumpIrTreeOptions(normalizeNames = normalizeNames, verboseErrorTypes = verboseErrorTypes))
RenderIrElementVisitor(DumpIrTreeOptions(normalizeNames = normalizeNames, verboseErrorTypes = verboseErrorTypes))
// This class is not used meaningfully, but is left for compatibility with compose.
abstract class SymbolRenamer private constructor() {
@Deprecated("Used from Compose.")
companion object DEFAULT : SymbolRenamer()
}