Files
kotlin-fork/compiler/testData/ir/irText/firProblems/DeepCopyIrTree.kt
T
Sergej Jaskiewicz f2031ae642 [IR] Don't print multifile/synthetic facade class names in irText tests
This only applies to JVM and fq-names in declaration references
in IR dumps.

This enables us to run more irText tests on platforms other than JVM
(see KT-58605).
2023-06-05 10:40:17 +00:00

46 lines
1.4 KiB
Kotlin
Vendored

// WITH_STDLIB
// FULL_JDK
interface IrType
interface TypeRemapper {
fun enterScope(irTypeParametersContainer: IrTypeParametersContainer)
fun remapType(type: IrType): IrType
fun leaveScope()
}
interface IrTypeParametersContainer : IrDeclaration, IrDeclarationParent {
var typeParameters: List<IrTypeParameter>
}
interface IrDeclaration
interface IrTypeParameter : IrDeclaration {
val superTypes: MutableList<IrType>
}
interface IrDeclarationParent
class DeepCopyIrTreeWithSymbols(private val typeRemapper: TypeRemapper) {
private fun copyTypeParameter(declaration: IrTypeParameter): IrTypeParameter = declaration
fun IrTypeParametersContainer.copyTypeParametersFrom(other: IrTypeParametersContainer) {
this.typeParameters = other.typeParameters.map {
copyTypeParameter(it)
}
typeRemapper.withinScope(this) {
for ((thisTypeParameter, otherTypeParameter) in this.typeParameters.zip(other.typeParameters)) {
otherTypeParameter.superTypes.mapTo(thisTypeParameter.superTypes) {
typeRemapper.remapType(it)
}
}
}
}
}
inline fun <T> TypeRemapper.withinScope(irTypeParametersContainer: IrTypeParametersContainer, fn: () -> T): T {
enterScope(irTypeParametersContainer)
val result = fn()
leaveScope()
return result
}