From 9aed92d2ddf43abba3c4f4d45eb41a957b82e841 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 12 Jun 2020 22:06:51 +0200 Subject: [PATCH] Partially revert "Persistent IR implementation" This partially reverts commit f437da8ee5ac33e3bb948b273d24f65a3d338d6b. Changes related to carriers and others are still there. They will be moved out to a separate module in a subsequent commit. --- .../impl/IrAnonymousInitializerImpl.kt | 19 +- .../ir/declarations/impl/IrClassImpl.kt | 97 +--------- .../ir/declarations/impl/IrConstructorImpl.kt | 12 +- .../ir/declarations/impl/IrDeclarationBase.kt | 167 ++---------------- .../ir/declarations/impl/IrEnumEntryImpl.kt | 30 +--- .../impl/IrErrorDeclarationImpl.kt | 3 +- .../ir/declarations/impl/IrFactoryImpl.kt | 2 +- .../ir/declarations/impl/IrFieldImpl.kt | 41 +---- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 2 +- .../ir/declarations/impl/IrFunctionBase.kt | 108 ++--------- .../ir/declarations/impl/IrFunctionImpl.kt | 40 +---- .../impl/IrLocalDelegatedPropertyImpl.kt | 48 +---- .../ir/declarations/impl/IrPropertyImpl.kt | 49 +---- .../ir/declarations/impl/IrTypeAliasImpl.kt | 17 +- .../declarations/impl/IrTypeParameterImpl.kt | 7 +- .../declarations/impl/IrValueParameterImpl.kt | 20 +-- .../ir/expressions/impl/IrBlockBodyImpl.kt | 20 +-- .../expressions/impl/IrExpressionBodyImpl.kt | 27 ++- 18 files changed, 85 insertions(+), 624 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt index 85f2d8462e1..65ad050726f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt @@ -20,7 +20,6 @@ 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.impl.carriers.AnonymousInitializerCarrier import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol @@ -30,10 +29,7 @@ class IrAnonymousInitializerImpl( origin: IrDeclarationOrigin, override val symbol: IrAnonymousInitializerSymbol, override val isStatic: Boolean = false -) : IrDeclarationBase(startOffset, endOffset, origin), - IrAnonymousInitializer, - AnonymousInitializerCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrAnonymousInitializer { init { symbol.bind(this) } @@ -42,16 +38,5 @@ class IrAnonymousInitializerImpl( override val descriptor: ClassDescriptor get() = symbol.descriptor - override var bodyField: IrBlockBody? = null - - override var body: IrBlockBody - get() = getCarrier().bodyField!! - set(v) { - if (getCarrier().bodyField !== v) { - if (v is IrBodyBase<*>) { - v.container = this - } - setCarrier().bodyField = v - } - } + override lateinit var body: IrBlockBody } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt index c6804276be8..1a1175d3a83 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt @@ -19,12 +19,9 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.carriers.ClassCarrier import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name -import java.util.* -import kotlin.collections.ArrayList class IrClassImpl( startOffset: Int, @@ -33,8 +30,8 @@ class IrClassImpl( override val symbol: IrClassSymbol, override val name: Name, override val kind: ClassKind, - visibility: Visibility, - modality: Modality, + override var visibility: Visibility, + override var modality: Modality, override val isCompanion: Boolean = false, override val isInner: Boolean = false, override val isData: Boolean = false, @@ -43,11 +40,7 @@ class IrClassImpl( override val isExpect: Boolean = false, override val isFun: Boolean = false, override val source: SourceElement = SourceElement.NO_SOURCE -) : - IrDeclarationBase(startOffset, endOffset, origin), - IrClass, - ClassCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrClass { init { symbol.bind(this) } @@ -56,89 +49,15 @@ class IrClassImpl( override val descriptor: ClassDescriptor get() = symbol.descriptor - override var visibilityField: Visibility = visibility - - override var visibility: Visibility - get() = getCarrier().visibilityField - set(v) { - if (visibility !== v) { - setCarrier().visibilityField = v - } - } - - override var thisReceiverField: IrValueParameter? = null - - override var thisReceiver: IrValueParameter? - get() = getCarrier().thisReceiverField - set(v) { - if (thisReceiver !== v) { - setCarrier().thisReceiverField = v - } - } - - private var initialDeclarations: MutableList? = null + override var thisReceiver: IrValueParameter? = null override val declarations: MutableList = ArrayList() - get() { - if (createdOn < stageController.currentStage && initialDeclarations == null) { - initialDeclarations = Collections.unmodifiableList(ArrayList(field)) - } - return if (stageController.canAccessDeclarationsOf(this)) { - ensureLowered() - field - } else { - initialDeclarations ?: field - } - } + override var typeParameters: List = emptyList() - override var typeParametersField: List = emptyList() + override var superTypes: List = emptyList() - override var typeParameters: List - get() = getCarrier().typeParametersField - set(v) { - if (typeParameters !== v) { - setCarrier().typeParametersField = v - } - } + override var metadata: MetadataSource? = null - override var superTypesField: List = emptyList() - - override var superTypes: List - get() = getCarrier().superTypesField - set(v) { - if (superTypes !== v) { - setCarrier().superTypesField = v - } - } - - override var metadataField: MetadataSource? = null - - override var metadata: MetadataSource? - get() = getCarrier().metadataField - set(v) { - if (metadata !== v) { - setCarrier().metadataField = v - } - } - - override var modalityField: Modality = modality - - override var modality: Modality - get() = getCarrier().modalityField - set(v) { - if (modality !== v) { - setCarrier().modalityField = v - } - } - - override var attributeOwnerIdField: IrAttributeContainer = this - - override var attributeOwnerId: IrAttributeContainer - get() = getCarrier().attributeOwnerIdField - set(v) { - if (attributeOwnerId !== v) { - setCarrier().attributeOwnerIdField = v - } - } + override var attributeOwnerId: IrAttributeContainer = this } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index 4271ec2efe0..0fd96f3f8a8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -21,7 +21,6 @@ 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.impl.carriers.ConstructorCarrier import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name @@ -38,16 +37,7 @@ class IrConstructorImpl( isExternal: Boolean, override val isPrimary: Boolean, isExpect: Boolean -) : - IrFunctionBase( - startOffset, endOffset, origin, name, - visibility, - isInline, isExternal, isExpect, - returnType - ), - IrConstructor, - ConstructorCarrier { - +) : IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), IrConstructor { init { symbol.bind(this) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt index 28c031dd40e..fbb47fe0f5c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt @@ -17,170 +17,27 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.ir.IrElementBase -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.carriers.BodyCarrier -import org.jetbrains.kotlin.ir.declarations.impl.carriers.Carrier -import org.jetbrains.kotlin.ir.declarations.impl.carriers.DeclarationCarrier -import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent +import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -abstract class IrDeclarationBase( +abstract class IrDeclarationBase( startOffset: Int, endOffset: Int, - origin: IrDeclarationOrigin -) : IrPersistingElementBase(startOffset, endOffset), - IrDeclaration, - DeclarationCarrier { - + override var origin: IrDeclarationOrigin +) : IrElementBase(startOffset, endOffset), IrDeclaration { override val factory: IrFactory get() = IrFactoryImpl - override var parentField: IrDeclarationParent? = null - - // TODO reduce boilerplate + private var _parent: IrDeclarationParent? = null override var parent: IrDeclarationParent - get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this") - set(p) { - if (getCarrier().parentField !== p) { - setCarrier().parentField = p - } - } - - override var originField: IrDeclarationOrigin = origin - - override var origin: IrDeclarationOrigin - get() = getCarrier().originField - set(p) { - if (getCarrier().originField !== p) { - setCarrier().originField = p - } - } - - var removedOn: Int = Int.MAX_VALUE - - override var annotationsField: List = emptyList() - - override var annotations: List - get() = getCarrier().annotationsField + get() = _parent + ?: throw UninitializedPropertyAccessException("Parent not initialized: $this") set(v) { - if (getCarrier().annotationsField !== v) { - setCarrier().annotationsField = v - } + _parent = v } - override fun ensureLowered() { - if (stageController.currentStage > loweredUpTo) { - stageController.lazyLower(this) - } - } + override var annotations: List = emptyList() } - -abstract class IrPersistingElementBase( - startOffset: Int, - endOffset: Int -) : IrElementBase(startOffset, endOffset), - Carrier { - - override var lastModified: Int = stageController.currentStage - - var loweredUpTo = stageController.currentStage - - // TODO Array? - private var values: Array? = null - - val createdOn: Int = stageController.currentStage -// get() = values?.let { (it[0] as T).lastModified } ?: lastModified - - abstract fun ensureLowered() - - protected fun getCarrier(): T { - stageController.currentStage.let { stage -> - ensureLowered() - - if (stage >= lastModified) return this as T - - if (stage < createdOn) error("Access before creation") - - val v = values - ?: error("How come?") - - var l = -1 - var r = v.size - while (r - l > 1) { - val m = (l + r) / 2 - if ((v[m] as T).lastModified <= stage) { - l = m - } else { - r = m - } - } - if (l < 0) { - error("access before creation") - } - - return v[l] as T - } - } - - // TODO naming? e.g. `mutableCarrier` - protected fun setCarrier(): T { - val stage = stageController.currentStage - - ensureLowered() - - if (!stageController.canModify(this)) { - error("Cannot modify this element!") - } - - if (loweredUpTo > stage) { - error("retrospective modification") - } - - // TODO move up? i.e. fast path - if (stage == lastModified) { - return this as T - } else { - values = (values ?: emptyArray()) + this.clone() as T - } - - this.lastModified = stage - - return this as T - } -} - -abstract class IrBodyBase>( - startOffset: Int, - endOffset: Int, - private var initializer: (B.() -> Unit)? -) : IrPersistingElementBase(startOffset, endOffset), IrBody, BodyCarrier { - override var containerField: IrDeclaration? = null - - var container: IrDeclaration - get() = getCarrier().containerField!! - set(p) { - if (getCarrier().containerField !== p) { - setCarrier().containerField = p - } - } - - protected fun checkEnabled(fn: () -> T): T { - if (!stageController.bodiesEnabled) error("Bodies disabled!") - ensureLowered() - return fn() - } - - override fun ensureLowered() { - initializer?.let { initFn -> - initializer = null - stageController.withStage(createdOn) { - stageController.bodyLowering { - initFn.invoke(this as B) - } - } - } - if (loweredUpTo + 1 < stageController.currentStage) { - stageController.lazyLower(this) - } - } -} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt index a5040a72ad5..5e2d33aa54f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt @@ -21,7 +21,6 @@ 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.impl.carriers.EnumEntryCarrier import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.name.Name @@ -32,10 +31,7 @@ class IrEnumEntryImpl( origin: IrDeclarationOrigin, override val symbol: IrEnumEntrySymbol, override val name: Name -) : IrDeclarationBase(startOffset, endOffset, origin), - IrEnumEntry, - EnumEntryCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrEnumEntry { init { symbol.bind(this) } @@ -44,26 +40,6 @@ class IrEnumEntryImpl( override val descriptor: ClassDescriptor get() = symbol.descriptor - override var correspondingClassField: IrClass? = null - - override var correspondingClass: IrClass? - get() = getCarrier().correspondingClassField - set(v) { - if (correspondingClass !== v) { - setCarrier().correspondingClassField = v - } - } - - override var initializerExpressionField: IrExpressionBody? = null - - override var initializerExpression: IrExpressionBody? - get() = getCarrier().initializerExpressionField - set(v) { - if (initializerExpression !== v) { - if (v is IrBodyBase<*>) { - v.container = this - } - setCarrier().initializerExpressionField = v - } - } + override var correspondingClass: IrClass? = null + override var initializerExpression: IrExpressionBody? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt index 60fc87c500c..b2c8bca22bf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt @@ -20,11 +20,10 @@ 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.IrErrorDeclaration -import org.jetbrains.kotlin.ir.declarations.impl.carriers.ErrorCarrier @OptIn(ObsoleteDescriptorBasedAPI::class) class IrErrorDeclarationImpl( startOffset: Int, endOffset: Int, override val descriptor: DeclarationDescriptor -) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration, ErrorCarrier +) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index d14163741ce..53a4040838b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -252,7 +252,7 @@ object IrFactoryImpl : IrFactory { startOffset: Int, endOffset: Int, ): IrBlockBody = - IrBlockBodyImpl(startOffset, endOffset, null) + IrBlockBodyImpl(startOffset, endOffset) override fun createBlockBody( startOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt index 9d6126a3105..44a3dfae7de 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt @@ -22,7 +22,6 @@ 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.impl.carriers.FieldCarrier import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol @@ -39,11 +38,8 @@ class IrFieldImpl( override var visibility: Visibility, override val isFinal: Boolean, override val isExternal: Boolean, - override val isStatic: Boolean -) : IrDeclarationBase(startOffset, endOffset, origin), - IrField, - FieldCarrier { - + override val isStatic: Boolean, +) : IrDeclarationBase(startOffset, endOffset, origin), IrField { init { symbol.bind(this) } @@ -52,36 +48,9 @@ class IrFieldImpl( override val descriptor: PropertyDescriptor get() = symbol.descriptor - override var initializerField: IrExpressionBody? = null + override var initializer: IrExpressionBody? = null - override var initializer: IrExpressionBody? - get() = getCarrier().initializerField - set(v) { - if (initializer !== v) { - if (v is IrBodyBase<*>) { - v.container = this - } - setCarrier().initializerField = v - } - } + override var correspondingPropertySymbol: IrPropertySymbol? = null - override var correspondingPropertySymbolField: IrPropertySymbol? = null - - override var correspondingPropertySymbol: IrPropertySymbol? - get() = getCarrier().correspondingPropertySymbolField - set(v) { - if (correspondingPropertySymbol !== v) { - setCarrier().correspondingPropertySymbolField = v - } - } - - override var metadataField: MetadataSource? = null - - override var metadata: MetadataSource? - get() = getCarrier().metadataField - set(v) { - if (metadata !== v) { - setCarrier().metadataField = v - } - } + override var metadata: MetadataSource? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index a9acdcd3800..b0ee1d4c9ab 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -52,7 +52,7 @@ class IrFileImpl( override val declarations: MutableList = ArrayList() - override var annotations: List = ArrayList() + override var annotations: List = emptyList() override var metadata: MetadataSource? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt index ad577340112..51b0500aed0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt @@ -18,116 +18,36 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionBaseCarrier import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.name.Name -abstract class IrFunctionBase( +abstract class IrFunctionBase( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, override val name: Name, - visibility: Visibility, + override var visibility: Visibility, override val isInline: Boolean, override val isExternal: Boolean, override val isExpect: Boolean, returnType: IrType -) : - IrDeclarationBase(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 - } - } - +) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction { @Suppress("DEPRECATION") - final override var returnType: IrType - get() = returnTypeField.let { - if (it !== IrUninitializedType) it else error("Return type is not initialized") - } - set(c) { - returnTypeField = c + final override var returnType: IrType = returnType + get() = if (field === org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) { + error("Return type is not initialized") + } else { + field } - override var typeParametersField: List = emptyList() + override var typeParameters: List = emptyList() - override var typeParameters: List - get() = getCarrier().typeParametersField - set(v) { - if (typeParameters !== v) { - setCarrier().typeParametersField = v - } - } + override var dispatchReceiverParameter: IrValueParameter? = null + override var extensionReceiverParameter: IrValueParameter? = null + override var valueParameters: List = emptyList() - override var dispatchReceiverParameterField: IrValueParameter? = null + final override var body: IrBody? = 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 IrBodyBase<*>) { - 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 metadata: MetadataSource? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index b056ea042b5..8e1613f4eae 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -13,7 +13,6 @@ 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.impl.carriers.FunctionCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -34,44 +33,13 @@ abstract class IrFunctionCommonImpl( override val isOperator: Boolean, override val isInfix: Boolean, isExpect: Boolean, -) : - IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), - IrSimpleFunction, - FunctionCarrier { - - @ObsoleteDescriptorBasedAPI - abstract override val descriptor: FunctionDescriptor - - override var overriddenSymbolsField: List = emptyList() - - override var overriddenSymbols: List - get() = getCarrier().overriddenSymbolsField - set(v) { - if (overriddenSymbols !== v) { - setCarrier().overriddenSymbolsField = v - } - } +) : IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), IrSimpleFunction { + override var overriddenSymbols: List = emptyList() @Suppress("LeakingThis") - override var attributeOwnerIdField: IrAttributeContainer = this + override var attributeOwnerId: IrAttributeContainer = this - override var attributeOwnerId: IrAttributeContainer - get() = getCarrier().attributeOwnerIdField - set(v) { - if (attributeOwnerId !== v) { - setCarrier().attributeOwnerIdField = v - } - } - - override var correspondingPropertySymbolField: IrPropertySymbol? = null - - override var correspondingPropertySymbol: IrPropertySymbol? - get() = getCarrier().correspondingPropertySymbolField - set(v) { - if (correspondingPropertySymbol !== v) { - setCarrier().correspondingPropertySymbolField = v - } - } + override var correspondingPropertySymbol: IrPropertySymbol? = null } class IrFunctionImpl( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt index 6e668529579..37831c6de5f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt @@ -19,12 +19,10 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.carriers.LocalDelegatedPropertyCarrier import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name -// TODO make not persistent class IrLocalDelegatedPropertyImpl( startOffset: Int, endOffset: Int, @@ -33,11 +31,7 @@ class IrLocalDelegatedPropertyImpl( override val name: Name, override val type: IrType, override val isVar: Boolean -) : - IrDeclarationBase(startOffset, endOffset, origin), - IrLocalDelegatedProperty, - LocalDelegatedPropertyCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrLocalDelegatedProperty { init { symbol.bind(this) } @@ -46,43 +40,11 @@ class IrLocalDelegatedPropertyImpl( override val descriptor: VariableDescriptorWithAccessors get() = symbol.descriptor - override var delegateField: IrVariable? = null + override lateinit var delegate: IrVariable - override var delegate: IrVariable - get() = getCarrier().delegateField!! - set(v) { - if (getCarrier().delegateField !== v) { - setCarrier().delegateField = v - } - } + override lateinit var getter: IrFunction - override var getterField: IrFunction? = null + override var setter: IrFunction? = null - override var getter: IrFunction - get() = getCarrier().getterField!! - set(v) { - if (getCarrier().getterField !== v) { - setCarrier().getterField = v - } - } - - override var setterField: IrFunction? = null - - override var setter: IrFunction? - get() = getCarrier().setterField - set(v) { - if (setter !== v) { - setCarrier().setterField = v - } - } - - override var metadataField: MetadataSource? = null - - override var metadata: MetadataSource? - get() = getCarrier().metadataField - set(v) { - if (metadata !== v) { - setCarrier().metadataField = v - } - } + override var metadata: MetadataSource? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt index 5ec1807cc21..d79101934a3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt @@ -21,7 +21,6 @@ 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.impl.carriers.PropertyCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.name.Name @@ -38,52 +37,14 @@ abstract class IrPropertyCommonImpl( override val isDelegated: Boolean, override val isExternal: Boolean, override val isExpect: Boolean, -) : IrDeclarationBase(startOffset, endOffset, origin), - IrProperty, - PropertyCarrier { +) : IrDeclarationBase(startOffset, endOffset, origin), IrProperty { + override var backingField: IrField? = null - @ObsoleteDescriptorBasedAPI - abstract override val descriptor: PropertyDescriptor + override var getter: IrSimpleFunction? = null - override var backingFieldField: IrField? = null + override var setter: IrSimpleFunction? = null - override var backingField: IrField? - get() = getCarrier().backingFieldField - set(v) { - if (backingField !== v) { - setCarrier().backingFieldField = v - } - } - - override var getterField: IrSimpleFunction? = null - - override var getter: IrSimpleFunction? - get() = getCarrier().getterField - set(v) { - if (getter !== v) { - setCarrier().getterField = v - } - } - - override var setterField: IrSimpleFunction? = null - - override var setter: IrSimpleFunction? - get() = getCarrier().setterField - set(v) { - if (setter !== v) { - setCarrier().setterField = v - } - } - - override var metadataField: MetadataSource? = null - - override var metadata: MetadataSource? - get() = getCarrier().metadataField - set(v) { - if (metadata !== v) { - setCarrier().metadataField = v - } - } + override var metadata: MetadataSource? = null } class IrPropertyImpl( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 489b51cfda6..b837fa112f6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -11,7 +11,6 @@ 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.impl.carriers.TypeAliasCarrier import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name @@ -25,11 +24,7 @@ class IrTypeAliasImpl( override val expandedType: IrType, override val isActual: Boolean, origin: IrDeclarationOrigin -) : - IrDeclarationBase(startOffset, endOffset, origin), - IrTypeAlias, - TypeAliasCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeAlias { init { symbol.bind(this) } @@ -38,13 +33,5 @@ class IrTypeAliasImpl( override val descriptor: TypeAliasDescriptor get() = symbol.descriptor - override var typeParametersField: List = emptyList() - - override var typeParameters: List - get() = getCarrier().typeParametersField - set(v) { - if (typeParameters !== v) { - setCarrier().typeParametersField = v - } - } + override var typeParameters: List = emptyList() } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt index b6d9ae16083..b6af55304ea 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt @@ -20,7 +20,6 @@ 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.IrTypeParameter -import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeParameterCarrier import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name @@ -36,11 +35,7 @@ class IrTypeParameterImpl( override val index: Int, override val isReified: Boolean, override val variance: Variance -) : - IrDeclarationBase(startOffset, endOffset, origin), - IrTypeParameter, - TypeParameterCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeParameter { init { symbol.bind(this) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index 60dc7c7d48a..027122c5016 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -20,7 +20,6 @@ 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.IrValueParameter -import org.jetbrains.kotlin.ir.declarations.impl.carriers.ValueParameterCarrier import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -37,11 +36,7 @@ class IrValueParameterImpl( override val varargElementType: IrType?, override val isCrossinline: Boolean, override val isNoinline: Boolean -) : - IrDeclarationBase(startOffset, endOffset, origin), - IrValueParameter, - ValueParameterCarrier { - +) : IrDeclarationBase(startOffset, endOffset, origin), IrValueParameter { @ObsoleteDescriptorBasedAPI override val descriptor: ParameterDescriptor get() = symbol.descriptor @@ -50,16 +45,5 @@ class IrValueParameterImpl( symbol.bind(this) } - override var defaultValueField: IrExpressionBody? = null - - override var defaultValue: IrExpressionBody? - get() = getCarrier().defaultValueField - set(v) { - if (defaultValue !== v) { - if (v is IrBodyBase<*>) { - v.container = this - } - setCarrier().defaultValueField = v - } - } + override var defaultValue: IrExpressionBody? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt index 0a7c33f1cf1..0ab6e7a3270 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockBodyImpl.kt @@ -16,28 +16,22 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrFactory -import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.IrBlockBody -class IrBlockBodyImpl( - startOffset: Int, - endOffset: Int, - initializer: (IrBlockBody.() -> Unit)? = null -) : - IrBodyBase(startOffset, endOffset, initializer), - IrBlockBody { - +class IrBlockBodyImpl(startOffset: Int, endOffset: Int) : IrElementBase(startOffset, endOffset), IrBlockBody { constructor(startOffset: Int, endOffset: Int, statements: List) : this(startOffset, endOffset) { - statementsField.addAll(statements) + this.statements.addAll(statements) } - private var statementsField: MutableList = ArrayList() + constructor(startOffset: Int, endOffset: Int, initializer: IrBlockBody.() -> Unit) : this(startOffset, endOffset) { + this.initializer() + } - override val statements: MutableList - get() = checkEnabled { statementsField } + override val statements: MutableList = ArrayList() override val factory: IrFactory get() = IrFactoryImpl diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt index a5ee47483a8..a5069b57481 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt @@ -16,33 +16,28 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.declarations.IrFactory -import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -class IrExpressionBodyImpl private constructor( +class IrExpressionBodyImpl( startOffset: Int, endOffset: Int, - private var expressionField: IrExpression? = null, initializer: (IrExpressionBody.() -> Unit)? = null -) : - IrBodyBase(startOffset, endOffset, initializer), - IrExpressionBody { +) : IrElementBase(startOffset, endOffset), IrExpressionBody { + init { + initializer?.invoke(this) + } - constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression, null) + constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset) { + this.expression = expression + } - constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset, expression, null) + constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression) - constructor(startOffset: Int, endOffset: Int, initializer: IrExpressionBody.() -> Unit) : - this(startOffset, endOffset, null, initializer) - - override var expression: IrExpression - get() = checkEnabled { expressionField!! } - set(e) { - checkEnabled { expressionField = e } - } + override lateinit var expression: IrExpression override val factory: IrFactory get() = IrFactoryImpl