IR: make IrTypeAlias.expandedType mutable

This commit is contained in:
Georgy Bronnikov
2020-09-03 16:26:55 +03:00
parent 78fc690f29
commit a3763e8276
5 changed files with 20 additions and 6 deletions
@@ -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() {
@@ -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
}
}
}
@@ -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<IrTypeParameter>
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<IrConstructorCall>,
override var typeParametersField: List<IrTypeParameter>
override var typeParametersField: List<IrTypeParameter>,
override var expandedTypeField: IrType,
) : TypeAliasCarrier
@@ -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 <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitTypeAlias(this, data)
@@ -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()