diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt index d5654b524cf..f5bfd4a1337 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrAnonymousInitializer.kt @@ -20,17 +20,21 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.persistent.carriers.AnonymousInitializerCarrier +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier +import org.jetbrains.kotlin.ir.declarations.stageController import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol internal class PersistentIrAnonymousInitializer( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrAnonymousInitializerSymbol, override val isStatic: Boolean = false -) : PersistentIrDeclarationBase(startOffset, endOffset, origin), +) : PersistentIrDeclarationBase, IrAnonymousInitializer, AnonymousInitializerCarrier { @@ -38,6 +42,16 @@ internal class PersistentIrAnonymousInitializer( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt index acbe7f7e003..ec6a3bf2b96 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrClass.kt @@ -19,15 +19,17 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ClassCarrier +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name import java.util.* internal class PersistentIrClass( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrClassSymbol, override val name: Name, @@ -43,7 +45,7 @@ internal class PersistentIrClass( override val isFun: Boolean = false, override val source: SourceElement = SourceElement.NO_SOURCE ) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), + PersistentIrDeclarationBase, IrClass, ClassCarrier { @@ -51,6 +53,16 @@ internal class PersistentIrClass( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt index 9ff3f5d02d7..081293efaac 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrConstructor.kt @@ -19,32 +19,29 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrConstructor -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ConstructorCarrier +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name internal class PersistentIrConstructor( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrConstructorSymbol, - name: Name, + override val name: Name, visibility: Visibility, returnType: IrType, - isInline: Boolean, - isExternal: Boolean, + override val isInline: Boolean, + override val isExternal: Boolean, override val isPrimary: Boolean, - isExpect: Boolean + override val isExpect: Boolean ) : - PersistentIrFunctionBase( - startOffset, endOffset, origin, name, - visibility, - isInline, isExternal, isExpect, - returnType - ), + PersistentIrDeclarationBase, IrConstructor, ConstructorCarrier { @@ -52,6 +49,108 @@ internal class PersistentIrConstructor( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + + override var returnTypeFieldField: IrType = returnType + + private var returnTypeField: IrType + get() = getCarrier().returnTypeFieldField + set(v) { + if (returnTypeField !== v) { + setCarrier().returnTypeFieldField = v + } + } + + @Suppress("DEPRECATION") + override var returnType: IrType + get() = returnTypeField.let { + if (it !== org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) it else error("Return type is not initialized") + } + set(c) { + returnTypeField = c + } + + override var typeParametersField: List = emptyList() + + override var typeParameters: List + get() = getCarrier().typeParametersField + set(v) { + if (typeParameters !== v) { + setCarrier().typeParametersField = v + } + } + + override var dispatchReceiverParameterField: IrValueParameter? = null + + override var dispatchReceiverParameter: IrValueParameter? + get() = getCarrier().dispatchReceiverParameterField + set(v) { + if (dispatchReceiverParameter !== v) { + setCarrier().dispatchReceiverParameterField = v + } + } + + override var extensionReceiverParameterField: IrValueParameter? = null + + override var extensionReceiverParameter: IrValueParameter? + get() = getCarrier().extensionReceiverParameterField + set(v) { + if (extensionReceiverParameter !== v) { + setCarrier().extensionReceiverParameterField = v + } + } + + override var valueParametersField: List = emptyList() + + override var valueParameters: List + get() = getCarrier().valueParametersField + set(v) { + if (valueParameters !== v) { + setCarrier().valueParametersField = v + } + } + + override var bodyField: IrBody? = null + + override var body: IrBody? + get() = getCarrier().bodyField + set(v) { + if (body !== v) { + if (v is PersistentIrBodyBase<*>) { + v.container = this + } + setCarrier().bodyField = v + } + } + + override var metadataField: MetadataSource? = null + + override var metadata: MetadataSource? + get() = getCarrier().metadataField + set(v) { + if (metadata !== v) { + setCarrier().metadataField = v + } + } + + override var visibilityField: Visibility = visibility + + override var visibility: Visibility + get() = getCarrier().visibilityField + set(v) { + if (visibility !== v) { + setCarrier().visibilityField = v + } + } + @ObsoleteDescriptorBasedAPI override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt index ec7029da4a6..0d123eb3362 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrDeclarationBase.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.ir.declarations.persistent -import org.jetbrains.kotlin.ir.IrElementBase +import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.persistent.carriers.BodyCarrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier @@ -24,19 +24,12 @@ import org.jetbrains.kotlin.ir.declarations.persistent.carriers.DeclarationCarri import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -abstract class PersistentIrDeclarationBase( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin -) : PersistentIrElementBase(startOffset, endOffset), - IrDeclaration, - DeclarationCarrier { +interface PersistentIrDeclarationBase : PersistentIrElementBase, IrDeclaration, DeclarationCarrier { + var removedOn: Int override val factory: IrFactory get() = PersistentIrFactory - override var parentField: IrDeclarationParent? = null - // TODO reduce boilerplate override var parent: IrDeclarationParent get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this") @@ -46,8 +39,6 @@ abstract class PersistentIrDeclarationBase( } } - override var originField: IrDeclarationOrigin = origin - override var origin: IrDeclarationOrigin get() = getCarrier().originField set(p) { @@ -56,10 +47,6 @@ abstract class PersistentIrDeclarationBase( } } - var removedOn: Int = Int.MAX_VALUE - - override var annotationsField: List = emptyList() - override var annotations: List get() = getCarrier().annotationsField set(v) { @@ -75,26 +62,19 @@ abstract class PersistentIrDeclarationBase( } } -@Suppress("UNCHECKED_CAST") -abstract class PersistentIrElementBase( - startOffset: Int, - endOffset: Int -) : IrElementBase(startOffset, endOffset), - Carrier { +interface PersistentIrElementBase : IrElement, Carrier { + override var lastModified: Int - override var lastModified: Int = stageController.currentStage - - var loweredUpTo = stageController.currentStage + var loweredUpTo: Int // TODO Array? - private var values: Array? = null + var values: Array? - val createdOn: Int = stageController.currentStage -// get() = values?.let { (it[0] as T).lastModified } ?: lastModified + val createdOn: Int - abstract fun ensureLowered() + fun ensureLowered() - protected fun getCarrier(): T { + fun getCarrier(): T { stageController.currentStage.let { stage -> ensureLowered() @@ -124,7 +104,7 @@ abstract class PersistentIrElementBase( } // TODO naming? e.g. `mutableCarrier` - protected fun setCarrier(): T { + fun setCarrier(): T { val stage = stageController.currentStage ensureLowered() @@ -150,12 +130,10 @@ abstract class PersistentIrElementBase( } } -abstract class PersistentIrBodyBase>( - startOffset: Int, - endOffset: Int, - private var initializer: (B.() -> Unit)? -) : PersistentIrElementBase(startOffset, endOffset), IrBody, BodyCarrier { - override var containerField: IrDeclaration? = null +interface PersistentIrBodyBase> : PersistentIrElementBase, BodyCarrier { + var initializer: (B.() -> Unit)? + + override var containerField: IrDeclaration? var container: IrDeclaration get() = getCarrier().containerField!! @@ -165,7 +143,7 @@ abstract class PersistentIrBodyBase>( } } - protected fun checkEnabled(fn: () -> T): T { + fun checkEnabled(fn: () -> T): T { if (!stageController.bodiesEnabled) error("Bodies disabled!") ensureLowered() return fn() @@ -182,7 +160,7 @@ abstract class PersistentIrBodyBase>( } } if (loweredUpTo + 1 < stageController.currentStage) { - stageController.lazyLower(this) + stageController.lazyLower(this as IrBody) } } } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt index 5a7d63cf1fc..1f08d48e294 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrEnumEntry.kt @@ -18,21 +18,21 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrEnumEntry +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.EnumEntryCarrier +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.name.Name internal class PersistentIrEnumEntry( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrEnumEntrySymbol, override val name: Name -) : PersistentIrDeclarationBase(startOffset, endOffset, origin), +) : PersistentIrDeclarationBase, IrEnumEntry, EnumEntryCarrier { @@ -40,6 +40,16 @@ internal class PersistentIrEnumEntry( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrErrorDeclaration.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrErrorDeclaration.kt index c7fd4670679..b92329e3102 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrErrorDeclaration.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrErrorDeclaration.kt @@ -19,12 +19,26 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ErrorCarrier +import org.jetbrains.kotlin.ir.declarations.stageController +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall @OptIn(ObsoleteDescriptorBasedAPI::class) internal class PersistentIrErrorDeclaration( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, override val descriptor: DeclarationDescriptor -) : PersistentIrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration, ErrorCarrier +) : PersistentIrDeclarationBase, IrErrorDeclaration, ErrorCarrier { + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() +} 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 a81a4a66a1b..9d986be3326 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 @@ -19,10 +19,10 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrField -import org.jetbrains.kotlin.ir.declarations.MetadataSource +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FieldCarrier +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol @@ -30,8 +30,8 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name internal class PersistentIrField( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrFieldSymbol, override val name: Name, @@ -40,7 +40,7 @@ internal class PersistentIrField( override val isFinal: Boolean, override val isExternal: Boolean, override val isStatic: Boolean -) : PersistentIrDeclarationBase(startOffset, endOffset, origin), +) : PersistentIrDeclarationBase, IrField, FieldCarrier { @@ -48,6 +48,16 @@ internal class PersistentIrField( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: PropertyDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt index 6359c6cb350..961fbc92a6a 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt @@ -9,36 +9,138 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrFakeOverrideFunction -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FunctionCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name internal abstract class PersistentIrFunctionCommon( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, - name: Name, + override val name: Name, visibility: Visibility, returnType: IrType, - isInline: Boolean, - isExternal: Boolean, + override val isInline: Boolean, + override val isExternal: Boolean, override val isTailrec: Boolean, override val isSuspend: Boolean, override val isOperator: Boolean, override val isInfix: Boolean, - isExpect: Boolean, + override val isExpect: Boolean, ) : - PersistentIrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), + PersistentIrDeclarationBase, IrSimpleFunction, FunctionCarrier { + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + + override var returnTypeFieldField: IrType = returnType + + private var returnTypeField: IrType + get() = getCarrier().returnTypeFieldField + set(v) { + if (returnTypeField !== v) { + setCarrier().returnTypeFieldField = v + } + } + + @Suppress("DEPRECATION") + final override var returnType: IrType + get() = returnTypeField.let { + if (it !== org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) it else error("Return type is not initialized") + } + set(c) { + returnTypeField = c + } + + override var typeParametersField: List = emptyList() + + override var typeParameters: List + get() = getCarrier().typeParametersField + set(v) { + if (typeParameters !== v) { + setCarrier().typeParametersField = v + } + } + + override var dispatchReceiverParameterField: IrValueParameter? = null + + override var dispatchReceiverParameter: IrValueParameter? + get() = getCarrier().dispatchReceiverParameterField + set(v) { + if (dispatchReceiverParameter !== v) { + setCarrier().dispatchReceiverParameterField = v + } + } + + override var extensionReceiverParameterField: IrValueParameter? = null + + override var extensionReceiverParameter: IrValueParameter? + get() = getCarrier().extensionReceiverParameterField + set(v) { + if (extensionReceiverParameter !== v) { + setCarrier().extensionReceiverParameterField = v + } + } + + override var valueParametersField: List = emptyList() + + override var valueParameters: List + get() = getCarrier().valueParametersField + set(v) { + if (valueParameters !== v) { + setCarrier().valueParametersField = v + } + } + + override var bodyField: IrBody? = null + + final override var body: IrBody? + get() = getCarrier().bodyField + set(v) { + if (body !== v) { + if (v is PersistentIrBodyBase<*>) { + v.container = this + } + setCarrier().bodyField = v + } + } + + override var metadataField: MetadataSource? = null + + override var metadata: MetadataSource? + get() = getCarrier().metadataField + set(v) { + if (metadata !== v) { + setCarrier().metadataField = v + } + } + + override var visibilityField: Visibility = visibility + + override var visibility: Visibility + get() = getCarrier().visibilityField + set(v) { + if (visibility !== v) { + setCarrier().visibilityField = v + } + } + override var overriddenSymbolsField: List = emptyList() override var overriddenSymbols: List diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionBase.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionBase.kt deleted file mode 100644 index cda9f359c1f..00000000000 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunctionBase.kt +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.declarations.persistent - -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FunctionBaseCarrier -import org.jetbrains.kotlin.ir.expressions.IrBody -import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.name.Name - -internal abstract class PersistentIrFunctionBase( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val name: Name, - visibility: Visibility, - override val isInline: Boolean, - override val isExternal: Boolean, - override val isExpect: Boolean, - returnType: IrType -) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), - IrFunction, - FunctionBaseCarrier { - - override var returnTypeFieldField: IrType = returnType - - private var returnTypeField: IrType - get() = getCarrier().returnTypeFieldField - set(v) { - if (returnTypeField !== v) { - setCarrier().returnTypeFieldField = v - } - } - - @Suppress("DEPRECATION") - final override var returnType: IrType - get() = returnTypeField.let { - if (it !== org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) it else error("Return type is not initialized") - } - set(c) { - returnTypeField = c - } - - override var typeParametersField: List = emptyList() - - override var typeParameters: List - get() = getCarrier().typeParametersField - set(v) { - if (typeParameters !== v) { - setCarrier().typeParametersField = v - } - } - - override var dispatchReceiverParameterField: IrValueParameter? = null - - override var dispatchReceiverParameter: IrValueParameter? - get() = getCarrier().dispatchReceiverParameterField - set(v) { - if (dispatchReceiverParameter !== v) { - setCarrier().dispatchReceiverParameterField = v - } - } - - override var extensionReceiverParameterField: IrValueParameter? = null - - override var extensionReceiverParameter: IrValueParameter? - get() = getCarrier().extensionReceiverParameterField - set(v) { - if (extensionReceiverParameter !== v) { - setCarrier().extensionReceiverParameterField = v - } - } - - override var valueParametersField: List = emptyList() - - override var valueParameters: List - get() = getCarrier().valueParametersField - set(v) { - if (valueParameters !== v) { - setCarrier().valueParametersField = v - } - } - - override var bodyField: IrBody? = null - - final override var body: IrBody? - get() = getCarrier().bodyField - set(v) { - if (body !== v) { - if (v is PersistentIrBodyBase<*>) { - v.container = this - } - setCarrier().bodyField = v - } - } - - override var metadataField: MetadataSource? = null - - override var metadata: MetadataSource? - get() = getCarrier().metadataField - set(v) { - if (metadata !== v) { - setCarrier().metadataField = v - } - } - - override var visibilityField: Visibility = visibility - - override var visibility: Visibility - get() = getCarrier().visibilityField - set(v) { - if (visibility !== v) { - setCarrier().visibilityField = v - } - } -} diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt index 19b41f9bd94..57663bf5681 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrLocalDelegatedProperty.kt @@ -19,22 +19,24 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.LocalDelegatedPropertyCarrier +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name // TODO make not persistent internal class PersistentIrLocalDelegatedProperty( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrLocalDelegatedPropertySymbol, override val name: Name, override val type: IrType, override val isVar: Boolean ) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), + PersistentIrDeclarationBase, IrLocalDelegatedProperty, LocalDelegatedPropertyCarrier { @@ -42,6 +44,16 @@ internal class PersistentIrLocalDelegatedProperty( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: VariableDescriptorWithAccessors get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt index 6753da7ce77..b67b5d267bb 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt @@ -21,14 +21,16 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.PropertyCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.name.Name internal abstract class PersistentIrPropertyCommon( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val name: Name, override var visibility: Visibility, @@ -38,10 +40,20 @@ internal abstract class PersistentIrPropertyCommon( override val isDelegated: Boolean, override val isExternal: Boolean, override val isExpect: Boolean, -) : PersistentIrDeclarationBase(startOffset, endOffset, origin), +) : PersistentIrDeclarationBase, IrProperty, PropertyCarrier { + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + override var backingFieldField: IrField? = null override var backingField: IrField? 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 708b34e1513..bdbbdd11c2c 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 @@ -8,17 +8,17 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrTypeAlias -import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.TypeAliasCarrier +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name internal class PersistentIrTypeAlias( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, override val symbol: IrTypeAliasSymbol, override val name: Name, override var visibility: Visibility, @@ -26,7 +26,7 @@ internal class PersistentIrTypeAlias( override val isActual: Boolean, origin: IrDeclarationOrigin ) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), + PersistentIrDeclarationBase, IrTypeAlias, TypeAliasCarrier { @@ -34,6 +34,16 @@ internal class PersistentIrTypeAlias( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: TypeAliasDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt index 1d2024f8121..d6bf4d1c1ee 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrTypeParameter.kt @@ -19,8 +19,12 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI 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.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.TypeParameterCarrier +import org.jetbrains.kotlin.ir.declarations.stageController +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name @@ -28,8 +32,8 @@ import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.SmartList internal class PersistentIrTypeParameter( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrTypeParameterSymbol, override val name: Name, @@ -37,7 +41,7 @@ internal class PersistentIrTypeParameter( override val isReified: Boolean, override val variance: Variance ) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), + PersistentIrDeclarationBase, IrTypeParameter, TypeParameterCarrier { @@ -45,6 +49,16 @@ internal class PersistentIrTypeParameter( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + @ObsoleteDescriptorBasedAPI override val descriptor: TypeParameterDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt index a6163660f2a..1e5aa4b2496 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt @@ -19,16 +19,20 @@ package org.jetbrains.kotlin.ir.declarations.persistent import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ValueParameterCarrier +import org.jetbrains.kotlin.ir.declarations.stageController +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name internal class PersistentIrValueParameter( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrValueParameterSymbol, override val name: Name, @@ -38,7 +42,7 @@ internal class PersistentIrValueParameter( override val isCrossinline: Boolean, override val isNoinline: Boolean ) : - PersistentIrDeclarationBase(startOffset, endOffset, origin), + PersistentIrDeclarationBase, IrValueParameter, ValueParameterCarrier { @@ -50,6 +54,16 @@ internal class PersistentIrValueParameter( symbol.bind(this) } + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var parentField: IrDeclarationParent? = null + override var originField: IrDeclarationOrigin = origin + override var removedOn: Int = Int.MAX_VALUE + override var annotationsField: List = emptyList() + override var defaultValueField: IrExpressionBody? = null override var defaultValue: IrExpressionBody? diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt index 67940689538..9454b54f1ce 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrBlockBody.kt @@ -17,19 +17,29 @@ package org.jetbrains.kotlin.ir.expressions.persistent import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier +import org.jetbrains.kotlin.ir.declarations.stageController import org.jetbrains.kotlin.ir.expressions.IrBlockBody internal class PersistentIrBlockBody( - startOffset: Int, - endOffset: Int, - initializer: (IrBlockBody.() -> Unit)? = null + override val startOffset: Int, + override val endOffset: Int, + override var initializer: (PersistentIrBlockBody.() -> Unit)? = null ) : - PersistentIrBodyBase(startOffset, endOffset, initializer), + PersistentIrBodyBase, IrBlockBody { + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var containerField: IrDeclaration? = null + constructor(startOffset: Int, endOffset: Int, statements: List) : this(startOffset, endOffset) { statementsField.addAll(statements) } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt index 05f90d49d96..7187531278e 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/expressions/persistent/PersistentIrExpressionBody.kt @@ -16,21 +16,31 @@ package org.jetbrains.kotlin.ir.expressions.persistent +import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory +import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier +import org.jetbrains.kotlin.ir.declarations.stageController import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody internal class PersistentIrExpressionBody private constructor( - startOffset: Int, - endOffset: Int, + override val startOffset: Int, + override val endOffset: Int, private var expressionField: IrExpression? = null, - initializer: (IrExpressionBody.() -> Unit)? = null + override var initializer: (PersistentIrExpressionBody.() -> Unit)? = null ) : - PersistentIrBodyBase(startOffset, endOffset, initializer), + PersistentIrBodyBase, IrExpressionBody { + override var lastModified: Int = stageController.currentStage + override var loweredUpTo: Int = stageController.currentStage + override var values: Array? = null + override val createdOn: Int = stageController.currentStage + + override var containerField: IrDeclaration? = null + constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression, null) constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset, expression, null)