Partially revert "Persistent IR implementation"

This partially reverts commit f437da8ee5.
Changes related to carriers and others are still there. They will be
moved out to a separate module in a subsequent commit.
This commit is contained in:
Alexander Udalov
2020-06-12 22:06:51 +02:00
parent 980b91d082
commit 9aed92d2dd
18 changed files with 85 additions and 624 deletions
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin 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.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
@@ -30,10 +29,7 @@ class IrAnonymousInitializerImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrAnonymousInitializerSymbol, override val symbol: IrAnonymousInitializerSymbol,
override val isStatic: Boolean = false override val isStatic: Boolean = false
) : IrDeclarationBase<AnonymousInitializerCarrier>(startOffset, endOffset, origin), ) : IrDeclarationBase(startOffset, endOffset, origin), IrAnonymousInitializer {
IrAnonymousInitializer,
AnonymousInitializerCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -42,16 +38,5 @@ class IrAnonymousInitializerImpl(
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override var bodyField: IrBlockBody? = null override lateinit var body: IrBlockBody
override var body: IrBlockBody
get() = getCarrier().bodyField!!
set(v) {
if (getCarrier().bodyField !== v) {
if (v is IrBodyBase<*>) {
v.container = this
}
setCarrier().bodyField = v
}
}
} }
@@ -19,12 +19,9 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* 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.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import java.util.*
import kotlin.collections.ArrayList
class IrClassImpl( class IrClassImpl(
startOffset: Int, startOffset: Int,
@@ -33,8 +30,8 @@ class IrClassImpl(
override val symbol: IrClassSymbol, override val symbol: IrClassSymbol,
override val name: Name, override val name: Name,
override val kind: ClassKind, override val kind: ClassKind,
visibility: Visibility, override var visibility: Visibility,
modality: Modality, override var modality: Modality,
override val isCompanion: Boolean = false, override val isCompanion: Boolean = false,
override val isInner: Boolean = false, override val isInner: Boolean = false,
override val isData: Boolean = false, override val isData: Boolean = false,
@@ -43,11 +40,7 @@ class IrClassImpl(
override val isExpect: Boolean = false, override val isExpect: Boolean = false,
override val isFun: Boolean = false, override val isFun: Boolean = false,
override val source: SourceElement = SourceElement.NO_SOURCE override val source: SourceElement = SourceElement.NO_SOURCE
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrClass {
IrDeclarationBase<ClassCarrier>(startOffset, endOffset, origin),
IrClass,
ClassCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -56,89 +49,15 @@ class IrClassImpl(
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override var visibilityField: Visibility = visibility override var thisReceiver: IrValueParameter? = null
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<IrDeclaration>? = null
override val declarations: MutableList<IrDeclaration> = ArrayList() override val declarations: MutableList<IrDeclaration> = ArrayList()
get() {
if (createdOn < stageController.currentStage && initialDeclarations == null) {
initialDeclarations = Collections.unmodifiableList(ArrayList(field))
}
return if (stageController.canAccessDeclarationsOf(this)) { override var typeParameters: List<IrTypeParameter> = emptyList()
ensureLowered()
field
} else {
initialDeclarations ?: field
}
}
override var typeParametersField: List<IrTypeParameter> = emptyList() override var superTypes: List<IrType> = emptyList()
override var typeParameters: List<IrTypeParameter> override var metadata: MetadataSource? = null
get() = getCarrier().typeParametersField
set(v) {
if (typeParameters !== v) {
setCarrier().typeParametersField = v
}
}
override var superTypesField: List<IrType> = emptyList() override var attributeOwnerId: IrAttributeContainer = this
override var superTypes: List<IrType>
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
}
}
} }
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin 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.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -38,16 +37,7 @@ class IrConstructorImpl(
isExternal: Boolean, isExternal: Boolean,
override val isPrimary: Boolean, override val isPrimary: Boolean,
isExpect: Boolean isExpect: Boolean
) : ) : IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), IrConstructor {
IrFunctionBase<ConstructorCarrier>(
startOffset, endOffset, origin, name,
visibility,
isInline, isExternal, isExpect,
returnType
),
IrConstructor,
ConstructorCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -17,170 +17,27 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.impl.carriers.BodyCarrier import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.impl.carriers.Carrier import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.impl.carriers.DeclarationCarrier import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
abstract class IrDeclarationBase<T : DeclarationCarrier>( abstract class IrDeclarationBase(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin override var origin: IrDeclarationOrigin
) : IrPersistingElementBase<T>(startOffset, endOffset), ) : IrElementBase(startOffset, endOffset), IrDeclaration {
IrDeclaration,
DeclarationCarrier {
override val factory: IrFactory override val factory: IrFactory
get() = IrFactoryImpl get() = IrFactoryImpl
override var parentField: IrDeclarationParent? = null private var _parent: IrDeclarationParent? = null
// TODO reduce boilerplate
override var parent: IrDeclarationParent override var parent: IrDeclarationParent
get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this") get() = _parent
set(p) { ?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
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<IrConstructorCall> = emptyList()
override var annotations: List<IrConstructorCall>
get() = getCarrier().annotationsField
set(v) { set(v) {
if (getCarrier().annotationsField !== v) { _parent = v
setCarrier().annotationsField = v
}
} }
override fun ensureLowered() { override var annotations: List<IrConstructorCall> = emptyList()
if (stageController.currentStage > loweredUpTo) {
stageController.lazyLower(this)
}
}
} }
abstract class IrPersistingElementBase<T : Carrier>(
startOffset: Int,
endOffset: Int
) : IrElementBase(startOffset, endOffset),
Carrier {
override var lastModified: Int = stageController.currentStage
var loweredUpTo = stageController.currentStage
// TODO Array<T>?
private var values: Array<Carrier>? = 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<B : IrBodyBase<B>>(
startOffset: Int,
endOffset: Int,
private var initializer: (B.() -> Unit)?
) : IrPersistingElementBase<BodyCarrier>(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 <T> 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)
}
}
}
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry 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.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -32,10 +31,7 @@ class IrEnumEntryImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrEnumEntrySymbol, override val symbol: IrEnumEntrySymbol,
override val name: Name override val name: Name
) : IrDeclarationBase<EnumEntryCarrier>(startOffset, endOffset, origin), ) : IrDeclarationBase(startOffset, endOffset, origin), IrEnumEntry {
IrEnumEntry,
EnumEntryCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -44,26 +40,6 @@ class IrEnumEntryImpl(
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override var correspondingClassField: IrClass? = null override var correspondingClass: IrClass? = null
override var initializerExpression: IrExpressionBody? = 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
}
}
} }
@@ -20,11 +20,10 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ErrorCarrier
@OptIn(ObsoleteDescriptorBasedAPI::class) @OptIn(ObsoleteDescriptorBasedAPI::class)
class IrErrorDeclarationImpl( class IrErrorDeclarationImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
override val descriptor: DeclarationDescriptor override val descriptor: DeclarationDescriptor
) : IrDeclarationBase<ErrorCarrier>(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration, ErrorCarrier ) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration
@@ -252,7 +252,7 @@ object IrFactoryImpl : IrFactory {
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
): IrBlockBody = ): IrBlockBody =
IrBlockBodyImpl(startOffset, endOffset, null) IrBlockBodyImpl(startOffset, endOffset)
override fun createBlockBody( override fun createBlockBody(
startOffset: Int, startOffset: Int,
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.MetadataSource 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.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -39,11 +38,8 @@ class IrFieldImpl(
override var visibility: Visibility, override var visibility: Visibility,
override val isFinal: Boolean, override val isFinal: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val isStatic: Boolean override val isStatic: Boolean,
) : IrDeclarationBase<FieldCarrier>(startOffset, endOffset, origin), ) : IrDeclarationBase(startOffset, endOffset, origin), IrField {
IrField,
FieldCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -52,36 +48,9 @@ class IrFieldImpl(
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override var initializerField: IrExpressionBody? = null override var initializer: IrExpressionBody? = null
override var initializer: IrExpressionBody? override var correspondingPropertySymbol: IrPropertySymbol? = null
get() = getCarrier().initializerField
set(v) {
if (initializer !== v) {
if (v is IrBodyBase<*>) {
v.container = this
}
setCarrier().initializerField = v
}
}
override var correspondingPropertySymbolField: IrPropertySymbol? = null override var metadata: MetadataSource? = 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
}
}
} }
@@ -52,7 +52,7 @@ class IrFileImpl(
override val declarations: MutableList<IrDeclaration> = ArrayList() override val declarations: MutableList<IrDeclaration> = ArrayList()
override var annotations: List<IrConstructorCall> = ArrayList() override var annotations: List<IrConstructorCall> = emptyList()
override var metadata: MetadataSource? = null override var metadata: MetadataSource? = null
@@ -18,116 +18,36 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.* 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.expressions.IrBody
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class IrFunctionBase<T : FunctionBaseCarrier>( abstract class IrFunctionBase(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val name: Name, override val name: Name,
visibility: Visibility, override var visibility: Visibility,
override val isInline: Boolean, override val isInline: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val isExpect: Boolean, override val isExpect: Boolean,
returnType: IrType returnType: IrType
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction {
IrDeclarationBase<T>(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") @Suppress("DEPRECATION")
final override var returnType: IrType final override var returnType: IrType = returnType
get() = returnTypeField.let { get() = if (field === org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) {
if (it !== IrUninitializedType) it else error("Return type is not initialized") error("Return type is not initialized")
} } else {
set(c) { field
returnTypeField = c
} }
override var typeParametersField: List<IrTypeParameter> = emptyList() override var typeParameters: List<IrTypeParameter> = emptyList()
override var typeParameters: List<IrTypeParameter> override var dispatchReceiverParameter: IrValueParameter? = null
get() = getCarrier().typeParametersField override var extensionReceiverParameter: IrValueParameter? = null
set(v) { override var valueParameters: List<IrValueParameter> = emptyList()
if (typeParameters !== v) {
setCarrier().typeParametersField = v
}
}
override var dispatchReceiverParameterField: IrValueParameter? = null final override var body: IrBody? = null
override var dispatchReceiverParameter: IrValueParameter? override var metadata: MetadataSource? = null
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<IrValueParameter> = emptyList()
override var valueParameters: List<IrValueParameter>
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
}
}
} }
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFakeOverrideFunction import org.jetbrains.kotlin.ir.declarations.IrFakeOverrideFunction
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction 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.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
@@ -34,44 +33,13 @@ abstract class IrFunctionCommonImpl(
override val isOperator: Boolean, override val isOperator: Boolean,
override val isInfix: Boolean, override val isInfix: Boolean,
isExpect: Boolean, isExpect: Boolean,
) : ) : IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), IrSimpleFunction {
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), override var overriddenSymbols: List<IrSimpleFunctionSymbol> = emptyList()
IrSimpleFunction,
FunctionCarrier {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: FunctionDescriptor
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
override var overriddenSymbols: List<IrSimpleFunctionSymbol>
get() = getCarrier().overriddenSymbolsField
set(v) {
if (overriddenSymbols !== v) {
setCarrier().overriddenSymbolsField = v
}
}
@Suppress("LeakingThis") @Suppress("LeakingThis")
override var attributeOwnerIdField: IrAttributeContainer = this override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerId: IrAttributeContainer override var correspondingPropertySymbol: IrPropertySymbol? = null
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
}
}
} }
class IrFunctionImpl( class IrFunctionImpl(
@@ -19,12 +19,10 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* 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.symbols.IrLocalDelegatedPropertySymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
// TODO make not persistent
class IrLocalDelegatedPropertyImpl( class IrLocalDelegatedPropertyImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
@@ -33,11 +31,7 @@ class IrLocalDelegatedPropertyImpl(
override val name: Name, override val name: Name,
override val type: IrType, override val type: IrType,
override val isVar: Boolean override val isVar: Boolean
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrLocalDelegatedProperty {
IrDeclarationBase<LocalDelegatedPropertyCarrier>(startOffset, endOffset, origin),
IrLocalDelegatedProperty,
LocalDelegatedPropertyCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -46,43 +40,11 @@ class IrLocalDelegatedPropertyImpl(
override val descriptor: VariableDescriptorWithAccessors override val descriptor: VariableDescriptorWithAccessors
get() = symbol.descriptor get() = symbol.descriptor
override var delegateField: IrVariable? = null override lateinit var delegate: IrVariable
override var delegate: IrVariable override lateinit var getter: IrFunction
get() = getCarrier().delegateField!!
set(v) {
if (getCarrier().delegateField !== v) {
setCarrier().delegateField = v
}
}
override var getterField: IrFunction? = null override var setter: IrFunction? = null
override var getter: IrFunction override var metadata: MetadataSource? = null
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
}
}
} }
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* 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.descriptors.WrappedPropertyDescriptor
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -38,52 +37,14 @@ abstract class IrPropertyCommonImpl(
override val isDelegated: Boolean, override val isDelegated: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val isExpect: Boolean, override val isExpect: Boolean,
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin), ) : IrDeclarationBase(startOffset, endOffset, origin), IrProperty {
IrProperty, override var backingField: IrField? = null
PropertyCarrier {
@ObsoleteDescriptorBasedAPI override var getter: IrSimpleFunction? = null
abstract override val descriptor: PropertyDescriptor
override var backingFieldField: IrField? = null override var setter: IrSimpleFunction? = null
override var backingField: IrField? override var metadata: MetadataSource? = null
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
}
}
} }
class IrPropertyImpl( class IrPropertyImpl(
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter 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.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,11 +24,7 @@ class IrTypeAliasImpl(
override val expandedType: IrType, override val expandedType: IrType,
override val isActual: Boolean, override val isActual: Boolean,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeAlias {
IrDeclarationBase<TypeAliasCarrier>(startOffset, endOffset, origin),
IrTypeAlias,
TypeAliasCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -38,13 +33,5 @@ class IrTypeAliasImpl(
override val descriptor: TypeAliasDescriptor override val descriptor: TypeAliasDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override var typeParametersField: List<IrTypeParameter> = emptyList() override var typeParameters: List<IrTypeParameter> = emptyList()
override var typeParameters: List<IrTypeParameter>
get() = getCarrier().typeParametersField
set(v) {
if (typeParameters !== v) {
setCarrier().typeParametersField = v
}
}
} }
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter 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.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -36,11 +35,7 @@ class IrTypeParameterImpl(
override val index: Int, override val index: Int,
override val isReified: Boolean, override val isReified: Boolean,
override val variance: Variance override val variance: Variance
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeParameter {
IrDeclarationBase<TypeParameterCarrier>(startOffset, endOffset, origin),
IrTypeParameter,
TypeParameterCarrier {
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrValueParameter 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.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
@@ -37,11 +36,7 @@ class IrValueParameterImpl(
override val varargElementType: IrType?, override val varargElementType: IrType?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean override val isNoinline: Boolean
) : ) : IrDeclarationBase(startOffset, endOffset, origin), IrValueParameter {
IrDeclarationBase<ValueParameterCarrier>(startOffset, endOffset, origin),
IrValueParameter,
ValueParameterCarrier {
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ParameterDescriptor override val descriptor: ParameterDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -50,16 +45,5 @@ class IrValueParameterImpl(
symbol.bind(this) symbol.bind(this)
} }
override var defaultValueField: IrExpressionBody? = null override var defaultValue: IrExpressionBody? = null
override var defaultValue: IrExpressionBody?
get() = getCarrier().defaultValueField
set(v) {
if (defaultValue !== v) {
if (v is IrBodyBase<*>) {
v.container = this
}
setCarrier().defaultValueField = v
}
}
} }
@@ -16,28 +16,22 @@
package org.jetbrains.kotlin.ir.expressions.impl package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.IrFactory 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.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrBlockBody
class IrBlockBodyImpl( class IrBlockBodyImpl(startOffset: Int, endOffset: Int) : IrElementBase(startOffset, endOffset), IrBlockBody {
startOffset: Int,
endOffset: Int,
initializer: (IrBlockBody.() -> Unit)? = null
) :
IrBodyBase<IrBlockBodyImpl>(startOffset, endOffset, initializer),
IrBlockBody {
constructor(startOffset: Int, endOffset: Int, statements: List<IrStatement>) : this(startOffset, endOffset) { constructor(startOffset: Int, endOffset: Int, statements: List<IrStatement>) : this(startOffset, endOffset) {
statementsField.addAll(statements) this.statements.addAll(statements)
} }
private var statementsField: MutableList<IrStatement> = ArrayList() constructor(startOffset: Int, endOffset: Int, initializer: IrBlockBody.() -> Unit) : this(startOffset, endOffset) {
this.initializer()
}
override val statements: MutableList<IrStatement> override val statements: MutableList<IrStatement> = ArrayList()
get() = checkEnabled { statementsField }
override val factory: IrFactory override val factory: IrFactory
get() = IrFactoryImpl get() = IrFactoryImpl
@@ -16,33 +16,28 @@
package org.jetbrains.kotlin.ir.expressions.impl 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.IrFactory
import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
class IrExpressionBodyImpl private constructor( class IrExpressionBodyImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
private var expressionField: IrExpression? = null,
initializer: (IrExpressionBody.() -> Unit)? = null initializer: (IrExpressionBody.() -> Unit)? = null
) : ) : IrElementBase(startOffset, endOffset), IrExpressionBody {
IrBodyBase<IrExpressionBodyImpl>(startOffset, endOffset, initializer), init {
IrExpressionBody { 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) : override lateinit var expression: IrExpression
this(startOffset, endOffset, null, initializer)
override var expression: IrExpression
get() = checkEnabled { expressionField!! }
set(e) {
checkEnabled { expressionField = e }
}
override val factory: IrFactory override val factory: IrFactory
get() = IrFactoryImpl get() = IrFactoryImpl