From a3763e82766ba05eced147a8df8b72a605f48674 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 3 Sep 2020 16:26:55 +0300 Subject: [PATCH] IR: make IrTypeAlias.expandedType mutable --- .../kotlin/ir/declarations/impl/IrTypeAliasImpl.kt | 2 +- .../declarations/persistent/PersistentIrTypeAlias.kt | 12 +++++++++++- .../persistent/carriers/TypeAliasCarrier.kt | 8 ++++++-- .../jetbrains/kotlin/ir/declarations/IrTypeAlias.kt | 2 +- .../kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt | 2 +- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 7822175b5f7..4e849a67fe3 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -20,7 +20,7 @@ class IrTypeAliasImpl( override val symbol: IrTypeAliasSymbol, override val name: Name, override var visibility: DescriptorVisibility, - override val expandedType: IrType, + override var expandedType: IrType, override val isActual: Boolean, override var origin: IrDeclarationOrigin ) : IrTypeAlias() { diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt index f6a126944fb..ca7d68ad4f2 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeAlias.kt @@ -22,7 +22,7 @@ internal class PersistentIrTypeAlias( override val symbol: IrTypeAliasSymbol, override val name: Name, override var visibility: DescriptorVisibility, - override val expandedType: IrType, + expandedType: IrType, override val isActual: Boolean, origin: IrDeclarationOrigin ) : IrTypeAlias(), @@ -56,4 +56,14 @@ internal class PersistentIrTypeAlias( setCarrier().typeParametersField = v } } + + override var expandedTypeField: IrType = expandedType + + override var expandedType: IrType + get() = getCarrier().expandedTypeField + set(v) { + if (expandedType !== v) { + setCarrier().expandedTypeField = v + } + } } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/TypeAliasCarrier.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/TypeAliasCarrier.kt index d6d1d0ea27f..80518218da4 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/TypeAliasCarrier.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/TypeAliasCarrier.kt @@ -9,9 +9,11 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.types.IrType internal interface TypeAliasCarrier : DeclarationCarrier { var typeParametersField: List + var expandedTypeField: IrType override fun clone(): TypeAliasCarrier { return TypeAliasCarrierImpl( @@ -19,7 +21,8 @@ internal interface TypeAliasCarrier : DeclarationCarrier { parentField, originField, annotationsField, - typeParametersField + typeParametersField, + expandedTypeField ) } } @@ -29,5 +32,6 @@ internal class TypeAliasCarrierImpl( override var parentField: IrDeclarationParent?, override var originField: IrDeclarationOrigin, override var annotationsField: List, - override var typeParametersField: List + override var typeParametersField: List, + override var expandedTypeField: IrType, ) : TypeAliasCarrier diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index d24458190f3..f2fee1943e2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -24,7 +24,7 @@ abstract class IrTypeAlias : abstract override val descriptor: TypeAliasDescriptor abstract val isActual: Boolean - abstract val expandedType: IrType + abstract var expandedType: IrType override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitTypeAlias(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt index 735577aa8b5..b855e61544e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt @@ -43,7 +43,7 @@ class IrLazyTypeAlias( } } - override val expandedType: IrType by lazy { + override var expandedType: IrType by lazyVar { withInitialIr { typeTranslator.buildWithScope(this) { descriptor.expandedType.toIrType()