From d9681e535da1a5326e08537ce4663a1bf7b82978 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 3 Sep 2020 15:07:55 +0300 Subject: [PATCH] IR: make IrField.type mutable --- .../kotlin/ir/declarations/impl/IrFieldImpl.kt | 2 +- .../ir/declarations/persistent/PersistentIrField.kt | 12 +++++++++++- .../declarations/persistent/carriers/FieldCarrier.kt | 4 ++++ .../org/jetbrains/kotlin/ir/declarations/IrField.kt | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt index 9f3b6d5d21a..e4dea615c3e 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt @@ -33,7 +33,7 @@ class IrFieldImpl( override var origin: IrDeclarationOrigin, override val symbol: IrFieldSymbol, override val name: Name, - override val type: IrType, + override var type: IrType, override var visibility: DescriptorVisibility, override val isFinal: Boolean, override val isExternal: Boolean, diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt index d50c3cd3f96..65d4d37c7f5 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrField.kt @@ -35,7 +35,7 @@ internal class PersistentIrField( origin: IrDeclarationOrigin, override val symbol: IrFieldSymbol, override val name: Name, - override val type: IrType, + type: IrType, override var visibility: DescriptorVisibility, override val isFinal: Boolean, override val isExternal: Boolean, @@ -94,4 +94,14 @@ internal class PersistentIrField( setCarrier().metadataField = v } } + + override var typeField: IrType = type + + override var type: IrType + get() = getCarrier().typeField + set(v) { + if (type !== v) { + setCarrier().typeField = v + } + } } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/FieldCarrier.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/FieldCarrier.kt index e41dd489211..ae32b1633ed 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/FieldCarrier.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/FieldCarrier.kt @@ -11,8 +11,10 @@ import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol +import org.jetbrains.kotlin.ir.types.IrType internal interface FieldCarrier : DeclarationCarrier { + var typeField: IrType var initializerField: IrExpressionBody? var correspondingPropertySymbolField: IrPropertySymbol? var metadataField: MetadataSource? @@ -23,6 +25,7 @@ internal interface FieldCarrier : DeclarationCarrier { parentField, originField, annotationsField, + typeField, initializerField, correspondingPropertySymbolField, metadataField @@ -35,6 +38,7 @@ internal class FieldCarrierImpl( override var parentField: IrDeclarationParent?, override var originField: IrDeclarationOrigin, override var annotationsField: List, + override var typeField: IrType, override var initializerField: IrExpressionBody?, override var correspondingPropertySymbolField: IrPropertySymbol?, override var metadataField: MetadataSource? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt index 29df37d5895..8b39978db30 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -22,7 +22,7 @@ abstract class IrField : @ObsoleteDescriptorBasedAPI abstract override val descriptor: PropertyDescriptor - abstract val type: IrType + abstract var type: IrType abstract val isFinal: Boolean abstract val isExternal: Boolean abstract val isStatic: Boolean