IR: slightly simplify deep copy interface
Do not pass TypeRemapper explicitly unless an instance of something other than DeepCopyTypeRemapper is required.
This commit is contained in:
committed by
Space Team
parent
d659b76de5
commit
e7e8cba1b4
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.ir
|
||||
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
|
||||
import org.jetbrains.kotlin.ir.util.NullDescriptorsRemapper
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
|
||||
@@ -16,7 +15,5 @@ fun <T : IrElement> T.deepCopyWithVariables(): T {
|
||||
val symbolsRemapper = DeepCopySymbolRemapper(NullDescriptorsRemapper)
|
||||
acceptVoid(symbolsRemapper)
|
||||
|
||||
val typesRemapper = DeepCopyTypeRemapper(symbolsRemapper)
|
||||
|
||||
return this.transform(DeepCopyIrTreeWithSymbols(symbolsRemapper, typesRemapper), null) as T
|
||||
return this.transform(DeepCopyIrTreeWithSymbols(symbolsRemapper), null) as T
|
||||
}
|
||||
|
||||
@@ -25,33 +25,29 @@ import org.jetbrains.kotlin.utils.memoryOptimizedMap
|
||||
|
||||
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
|
||||
initialParent: IrDeclarationParent? = null,
|
||||
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 =
|
||||
{ symbolRemapper, typeRemapper -> DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) },
|
||||
createTypeRemapper: (SymbolRemapper) -> TypeRemapper = ::DeepCopyTypeRemapper
|
||||
): T {
|
||||
val symbolRemapper = DeepCopySymbolRemapper()
|
||||
acceptVoid(symbolRemapper)
|
||||
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
||||
return transform(createCopier(symbolRemapper, typeRemapper), null).patchDeclarationParents(initialParent) as T
|
||||
val typeRemapper = createTypeRemapper(symbolRemapper)
|
||||
return transform(DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper), null).patchDeclarationParents(initialParent) as T
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
open class DeepCopyIrTreeWithSymbols(
|
||||
private val symbolRemapper: SymbolRemapper,
|
||||
private val typeRemapper: TypeRemapper,
|
||||
typeRemapper: TypeRemapper? = null,
|
||||
// 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
|
||||
private val typeRemapper: TypeRemapper = typeRemapper ?: DeepCopyTypeRemapper(symbolRemapper)
|
||||
|
||||
init {
|
||||
// TODO refactor
|
||||
(typeRemapper as? DeepCopyTypeRemapper)?.let {
|
||||
// After removing usages of DeepCopyTypeRemapper constructor from compose, the lateinit property `DeepCopyTypeRemapper.deepCopy`
|
||||
// can be refactored to a constructor parameter.
|
||||
(this.typeRemapper as? DeepCopyTypeRemapper)?.let {
|
||||
it.deepCopy = this
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,14 +14,11 @@ fun <T : IrElement> T.deepCopySavingMetadata(
|
||||
symbolRemapper: DeepCopySymbolRemapper = DeepCopySymbolRemapper()
|
||||
): T {
|
||||
acceptVoid(symbolRemapper)
|
||||
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return transform(DeepCopySavingMetadata(symbolRemapper, typeRemapper), null)
|
||||
.patchDeclarationParents(initialParent) as T
|
||||
return transform(DeepCopySavingMetadata(symbolRemapper), null).patchDeclarationParents(initialParent) as T
|
||||
}
|
||||
|
||||
private class DeepCopySavingMetadata(symbolRemapper: SymbolRemapper, typeRemapper: TypeRemapper) :
|
||||
DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) {
|
||||
private class DeepCopySavingMetadata(symbolRemapper: SymbolRemapper) : DeepCopyIrTreeWithSymbols(symbolRemapper) {
|
||||
override fun visitFile(declaration: IrFile): IrFile =
|
||||
super.visitFile(declaration).apply {
|
||||
metadata = declaration.metadata
|
||||
@@ -30,7 +27,6 @@ private class DeepCopySavingMetadata(symbolRemapper: SymbolRemapper, typeRemappe
|
||||
override fun visitClass(declaration: IrClass): IrClass =
|
||||
super.visitClass(declaration).apply {
|
||||
metadata = declaration.metadata
|
||||
|
||||
}
|
||||
|
||||
override fun visitConstructor(declaration: IrConstructor): IrConstructor =
|
||||
|
||||
Reference in New Issue
Block a user