PIR: transform base implementation classes to interfaces

Unfortunately this requires a lot of boilerplate, but is a requirement
for transforming the main IR element hierarchy interfaces
(IrDeclaration, IrClass, ...) to classes.
This commit is contained in:
Alexander Udalov
2020-07-21 22:43:35 +02:00
parent 13766d5075
commit 9152df4702
16 changed files with 432 additions and 243 deletions
@@ -20,17 +20,21 @@ 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.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.AnonymousInitializerCarrier 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.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
internal class PersistentIrAnonymousInitializer( internal class PersistentIrAnonymousInitializer(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrAnonymousInitializerSymbol, override val symbol: IrAnonymousInitializerSymbol,
override val isStatic: Boolean = false override val isStatic: Boolean = false
) : PersistentIrDeclarationBase<AnonymousInitializerCarrier>(startOffset, endOffset, origin), ) : PersistentIrDeclarationBase<AnonymousInitializerCarrier>,
IrAnonymousInitializer, IrAnonymousInitializer,
AnonymousInitializerCarrier { AnonymousInitializerCarrier {
@@ -38,6 +42,16 @@ internal class PersistentIrAnonymousInitializer(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -19,15 +19,17 @@ package org.jetbrains.kotlin.ir.declarations.persistent
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.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ClassCarrier 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.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 java.util.*
internal class PersistentIrClass( internal class PersistentIrClass(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrClassSymbol, override val symbol: IrClassSymbol,
override val name: Name, override val name: Name,
@@ -43,7 +45,7 @@ internal class PersistentIrClass(
override val isFun: Boolean = false, override val isFun: Boolean = false,
override val source: SourceElement = SourceElement.NO_SOURCE override val source: SourceElement = SourceElement.NO_SOURCE
) : ) :
PersistentIrDeclarationBase<ClassCarrier>(startOffset, endOffset, origin), PersistentIrDeclarationBase<ClassCarrier>,
IrClass, IrClass,
ClassCarrier { ClassCarrier {
@@ -51,6 +53,16 @@ internal class PersistentIrClass(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -19,32 +19,29 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
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.IrConstructor import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.ConstructorCarrier 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.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
internal class PersistentIrConstructor( internal class PersistentIrConstructor(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrConstructorSymbol, override val symbol: IrConstructorSymbol,
name: Name, override val name: Name,
visibility: Visibility, visibility: Visibility,
returnType: IrType, returnType: IrType,
isInline: Boolean, override val isInline: Boolean,
isExternal: Boolean, override val isExternal: Boolean,
override val isPrimary: Boolean, override val isPrimary: Boolean,
isExpect: Boolean override val isExpect: Boolean
) : ) :
PersistentIrFunctionBase<ConstructorCarrier>( PersistentIrDeclarationBase<ConstructorCarrier>,
startOffset, endOffset, origin, name,
visibility,
isInline, isExternal, isExpect,
returnType
),
IrConstructor, IrConstructor,
ConstructorCarrier { ConstructorCarrier {
@@ -52,6 +49,108 @@ internal class PersistentIrConstructor(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = 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<IrTypeParameter> = emptyList()
override var typeParameters: List<IrTypeParameter>
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<IrValueParameter> = emptyList()
override var valueParameters: List<IrValueParameter>
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 @ObsoleteDescriptorBasedAPI
override val descriptor: ClassConstructorDescriptor override val descriptor: ClassConstructorDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.ir.declarations.persistent 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.*
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.BodyCarrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.BodyCarrier
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier 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.IrBody
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
abstract class PersistentIrDeclarationBase<T : DeclarationCarrier>( interface PersistentIrDeclarationBase<T : DeclarationCarrier> : PersistentIrElementBase<T>, IrDeclaration, DeclarationCarrier {
startOffset: Int, var removedOn: Int
endOffset: Int,
origin: IrDeclarationOrigin
) : PersistentIrElementBase<T>(startOffset, endOffset),
IrDeclaration,
DeclarationCarrier {
override val factory: IrFactory override val factory: IrFactory
get() = PersistentIrFactory get() = PersistentIrFactory
override var parentField: IrDeclarationParent? = null
// TODO reduce boilerplate // TODO reduce boilerplate
override var parent: IrDeclarationParent override var parent: IrDeclarationParent
get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this") get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
@@ -46,8 +39,6 @@ abstract class PersistentIrDeclarationBase<T : DeclarationCarrier>(
} }
} }
override var originField: IrDeclarationOrigin = origin
override var origin: IrDeclarationOrigin override var origin: IrDeclarationOrigin
get() = getCarrier().originField get() = getCarrier().originField
set(p) { set(p) {
@@ -56,10 +47,6 @@ abstract class PersistentIrDeclarationBase<T : DeclarationCarrier>(
} }
} }
var removedOn: Int = Int.MAX_VALUE
override var annotationsField: List<IrConstructorCall> = emptyList()
override var annotations: List<IrConstructorCall> override var annotations: List<IrConstructorCall>
get() = getCarrier().annotationsField get() = getCarrier().annotationsField
set(v) { set(v) {
@@ -75,26 +62,19 @@ abstract class PersistentIrDeclarationBase<T : DeclarationCarrier>(
} }
} }
@Suppress("UNCHECKED_CAST") interface PersistentIrElementBase<T : Carrier> : IrElement, Carrier {
abstract class PersistentIrElementBase<T : Carrier>( override var lastModified: Int
startOffset: Int,
endOffset: Int
) : IrElementBase(startOffset, endOffset),
Carrier {
override var lastModified: Int = stageController.currentStage var loweredUpTo: Int
var loweredUpTo = stageController.currentStage
// TODO Array<T>? // TODO Array<T>?
private var values: Array<Carrier>? = null var values: Array<Carrier>?
val createdOn: Int = stageController.currentStage val createdOn: Int
// get() = values?.let { (it[0] as T).lastModified } ?: lastModified
abstract fun ensureLowered() fun ensureLowered()
protected fun getCarrier(): T { fun getCarrier(): T {
stageController.currentStage.let { stage -> stageController.currentStage.let { stage ->
ensureLowered() ensureLowered()
@@ -124,7 +104,7 @@ abstract class PersistentIrElementBase<T : Carrier>(
} }
// TODO naming? e.g. `mutableCarrier` // TODO naming? e.g. `mutableCarrier`
protected fun setCarrier(): T { fun setCarrier(): T {
val stage = stageController.currentStage val stage = stageController.currentStage
ensureLowered() ensureLowered()
@@ -150,12 +130,10 @@ abstract class PersistentIrElementBase<T : Carrier>(
} }
} }
abstract class PersistentIrBodyBase<B : PersistentIrBodyBase<B>>( interface PersistentIrBodyBase<B : PersistentIrBodyBase<B>> : PersistentIrElementBase<BodyCarrier>, BodyCarrier {
startOffset: Int, var initializer: (B.() -> Unit)?
endOffset: Int,
private var initializer: (B.() -> Unit)? override var containerField: IrDeclaration?
) : PersistentIrElementBase<BodyCarrier>(startOffset, endOffset), IrBody, BodyCarrier {
override var containerField: IrDeclaration? = null
var container: IrDeclaration var container: IrDeclaration
get() = getCarrier().containerField!! get() = getCarrier().containerField!!
@@ -165,7 +143,7 @@ abstract class PersistentIrBodyBase<B : PersistentIrBodyBase<B>>(
} }
} }
protected fun <T> checkEnabled(fn: () -> T): T { fun <T> checkEnabled(fn: () -> T): T {
if (!stageController.bodiesEnabled) error("Bodies disabled!") if (!stageController.bodiesEnabled) error("Bodies disabled!")
ensureLowered() ensureLowered()
return fn() return fn()
@@ -182,7 +160,7 @@ abstract class PersistentIrBodyBase<B : PersistentIrBodyBase<B>>(
} }
} }
if (loweredUpTo + 1 < stageController.currentStage) { if (loweredUpTo + 1 < stageController.currentStage) {
stageController.lazyLower(this) stageController.lazyLower(this as IrBody)
} }
} }
} }
@@ -18,21 +18,21 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.EnumEntryCarrier 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.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
internal class PersistentIrEnumEntry( internal class PersistentIrEnumEntry(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrEnumEntrySymbol, override val symbol: IrEnumEntrySymbol,
override val name: Name override val name: Name
) : PersistentIrDeclarationBase<EnumEntryCarrier>(startOffset, endOffset, origin), ) : PersistentIrDeclarationBase<EnumEntryCarrier>,
IrEnumEntry, IrEnumEntry,
EnumEntryCarrier { EnumEntryCarrier {
@@ -40,6 +40,16 @@ internal class PersistentIrEnumEntry(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -19,12 +19,26 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor 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.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration 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.persistent.carriers.ErrorCarrier
import org.jetbrains.kotlin.ir.declarations.stageController
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@OptIn(ObsoleteDescriptorBasedAPI::class) @OptIn(ObsoleteDescriptorBasedAPI::class)
internal class PersistentIrErrorDeclaration( internal class PersistentIrErrorDeclaration(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
override val descriptor: DeclarationDescriptor override val descriptor: DeclarationDescriptor
) : PersistentIrDeclarationBase<ErrorCarrier>(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration, ErrorCarrier ) : PersistentIrDeclarationBase<ErrorCarrier>, IrErrorDeclaration, ErrorCarrier {
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
}
@@ -19,10 +19,10 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.PropertyDescriptor 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.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FieldCarrier 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.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
@@ -30,8 +30,8 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal class PersistentIrField( internal class PersistentIrField(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrFieldSymbol, override val symbol: IrFieldSymbol,
override val name: Name, override val name: Name,
@@ -40,7 +40,7 @@ internal class PersistentIrField(
override val isFinal: Boolean, override val isFinal: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val isStatic: Boolean override val isStatic: Boolean
) : PersistentIrDeclarationBase<FieldCarrier>(startOffset, endOffset, origin), ) : PersistentIrDeclarationBase<FieldCarrier>,
IrField, IrField,
FieldCarrier { FieldCarrier {
@@ -48,6 +48,16 @@ internal class PersistentIrField(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -9,36 +9,138 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
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.IrAttributeContainer import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.IrFakeOverrideFunction
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FunctionCarrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.FunctionCarrier
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor 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.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
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
internal abstract class PersistentIrFunctionCommon( internal abstract class PersistentIrFunctionCommon(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
name: Name, override val name: Name,
visibility: Visibility, visibility: Visibility,
returnType: IrType, returnType: IrType,
isInline: Boolean, override val isInline: Boolean,
isExternal: Boolean, override val isExternal: Boolean,
override val isTailrec: Boolean, override val isTailrec: Boolean,
override val isSuspend: Boolean, override val isSuspend: Boolean,
override val isOperator: Boolean, override val isOperator: Boolean,
override val isInfix: Boolean, override val isInfix: Boolean,
isExpect: Boolean, override val isExpect: Boolean,
) : ) :
PersistentIrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType), PersistentIrDeclarationBase<FunctionCarrier>,
IrSimpleFunction, IrSimpleFunction,
FunctionCarrier { FunctionCarrier {
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = 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<IrTypeParameter> = emptyList()
override var typeParameters: List<IrTypeParameter>
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<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 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<IrSimpleFunctionSymbol> = emptyList() override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
override var overriddenSymbols: List<IrSimpleFunctionSymbol> override var overriddenSymbols: List<IrSimpleFunctionSymbol>
@@ -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<T : FunctionBaseCarrier>(
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<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")
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<IrTypeParameter> = emptyList()
override var typeParameters: List<IrTypeParameter>
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<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 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
}
}
}
@@ -19,22 +19,24 @@ package org.jetbrains.kotlin.ir.declarations.persistent
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.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.LocalDelegatedPropertyCarrier 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.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 // TODO make not persistent
internal class PersistentIrLocalDelegatedProperty( internal class PersistentIrLocalDelegatedProperty(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrLocalDelegatedPropertySymbol, override val symbol: IrLocalDelegatedPropertySymbol,
override val name: Name, override val name: Name,
override val type: IrType, override val type: IrType,
override val isVar: Boolean override val isVar: Boolean
) : ) :
PersistentIrDeclarationBase<LocalDelegatedPropertyCarrier>(startOffset, endOffset, origin), PersistentIrDeclarationBase<LocalDelegatedPropertyCarrier>,
IrLocalDelegatedProperty, IrLocalDelegatedProperty,
LocalDelegatedPropertyCarrier { LocalDelegatedPropertyCarrier {
@@ -42,6 +44,16 @@ internal class PersistentIrLocalDelegatedProperty(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: VariableDescriptorWithAccessors override val descriptor: VariableDescriptorWithAccessors
get() = symbol.descriptor get() = symbol.descriptor
@@ -21,14 +21,16 @@ 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.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.PropertyCarrier import org.jetbrains.kotlin.ir.declarations.persistent.carriers.PropertyCarrier
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor 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.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal abstract class PersistentIrPropertyCommon( internal abstract class PersistentIrPropertyCommon(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val name: Name, override val name: Name,
override var visibility: Visibility, override var visibility: Visibility,
@@ -38,10 +40,20 @@ internal abstract class PersistentIrPropertyCommon(
override val isDelegated: Boolean, override val isDelegated: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val isExpect: Boolean, override val isExpect: Boolean,
) : PersistentIrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin), ) : PersistentIrDeclarationBase<PropertyCarrier>,
IrProperty, IrProperty,
PropertyCarrier { PropertyCarrier {
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
override var backingFieldField: IrField? = null override var backingFieldField: IrField? = null
override var backingField: IrField? override var backingField: IrField?
@@ -8,17 +8,17 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
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.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.TypeAliasCarrier 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.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
internal class PersistentIrTypeAlias( internal class PersistentIrTypeAlias(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
override val symbol: IrTypeAliasSymbol, override val symbol: IrTypeAliasSymbol,
override val name: Name, override val name: Name,
override var visibility: Visibility, override var visibility: Visibility,
@@ -26,7 +26,7 @@ internal class PersistentIrTypeAlias(
override val isActual: Boolean, override val isActual: Boolean,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin
) : ) :
PersistentIrDeclarationBase<TypeAliasCarrier>(startOffset, endOffset, origin), PersistentIrDeclarationBase<TypeAliasCarrier>,
IrTypeAlias, IrTypeAlias,
TypeAliasCarrier { TypeAliasCarrier {
@@ -34,6 +34,16 @@ internal class PersistentIrTypeAlias(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: TypeAliasDescriptor override val descriptor: TypeAliasDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -19,8 +19,12 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor 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.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter 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.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.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
@@ -28,8 +32,8 @@ import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
internal class PersistentIrTypeParameter( internal class PersistentIrTypeParameter(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrTypeParameterSymbol, override val symbol: IrTypeParameterSymbol,
override val name: Name, override val name: Name,
@@ -37,7 +41,7 @@ internal class PersistentIrTypeParameter(
override val isReified: Boolean, override val isReified: Boolean,
override val variance: Variance override val variance: Variance
) : ) :
PersistentIrDeclarationBase<TypeParameterCarrier>(startOffset, endOffset, origin), PersistentIrDeclarationBase<TypeParameterCarrier>,
IrTypeParameter, IrTypeParameter,
TypeParameterCarrier { TypeParameterCarrier {
@@ -45,6 +49,16 @@ internal class PersistentIrTypeParameter(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: TypeParameterDescriptor override val descriptor: TypeParameterDescriptor
get() = symbol.descriptor get() = symbol.descriptor
@@ -19,16 +19,20 @@ package org.jetbrains.kotlin.ir.declarations.persistent
import org.jetbrains.kotlin.descriptors.ParameterDescriptor 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.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrValueParameter 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.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.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
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal class PersistentIrValueParameter( internal class PersistentIrValueParameter(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrValueParameterSymbol, override val symbol: IrValueParameterSymbol,
override val name: Name, override val name: Name,
@@ -38,7 +42,7 @@ internal class PersistentIrValueParameter(
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean override val isNoinline: Boolean
) : ) :
PersistentIrDeclarationBase<ValueParameterCarrier>(startOffset, endOffset, origin), PersistentIrDeclarationBase<ValueParameterCarrier>,
IrValueParameter, IrValueParameter,
ValueParameterCarrier { ValueParameterCarrier {
@@ -50,6 +54,16 @@ internal class PersistentIrValueParameter(
symbol.bind(this) symbol.bind(this)
} }
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = 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<IrConstructorCall> = emptyList()
override var defaultValueField: IrExpressionBody? = null override var defaultValueField: IrExpressionBody? = null
override var defaultValue: IrExpressionBody? override var defaultValue: IrExpressionBody?
@@ -17,19 +17,29 @@
package org.jetbrains.kotlin.ir.expressions.persistent package org.jetbrains.kotlin.ir.expressions.persistent
import org.jetbrains.kotlin.ir.IrStatement 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.IrFactory
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory 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 import org.jetbrains.kotlin.ir.expressions.IrBlockBody
internal class PersistentIrBlockBody( internal class PersistentIrBlockBody(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
initializer: (IrBlockBody.() -> Unit)? = null override var initializer: (PersistentIrBlockBody.() -> Unit)? = null
) : ) :
PersistentIrBodyBase<PersistentIrBlockBody>(startOffset, endOffset, initializer), PersistentIrBodyBase<PersistentIrBlockBody>,
IrBlockBody { IrBlockBody {
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = null
override val createdOn: Int = stageController.currentStage
override var containerField: IrDeclaration? = null
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) statementsField.addAll(statements)
} }
@@ -16,21 +16,31 @@
package org.jetbrains.kotlin.ir.expressions.persistent 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.IrFactory
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrBodyBase
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory 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.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
internal class PersistentIrExpressionBody private constructor( internal class PersistentIrExpressionBody private constructor(
startOffset: Int, override val startOffset: Int,
endOffset: Int, override val endOffset: Int,
private var expressionField: IrExpression? = null, private var expressionField: IrExpression? = null,
initializer: (IrExpressionBody.() -> Unit)? = null override var initializer: (PersistentIrExpressionBody.() -> Unit)? = null
) : ) :
PersistentIrBodyBase<PersistentIrExpressionBody>(startOffset, endOffset, initializer), PersistentIrBodyBase<PersistentIrExpressionBody>,
IrExpressionBody { IrExpressionBody {
override var lastModified: Int = stageController.currentStage
override var loweredUpTo: Int = stageController.currentStage
override var values: Array<Carrier>? = null
override val createdOn: Int = stageController.currentStage
override var containerField: IrDeclaration? = null
constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression, null) constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression, null)
constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset, expression, null) constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset, expression, null)