IR: make most properties mutable

This commit is contained in:
Alexander Udalov
2023-02-13 14:53:10 +01:00
committed by Space Team
parent d2938e732a
commit 22b4b29292
94 changed files with 419 additions and 336 deletions
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.lazy
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
@@ -38,37 +37,58 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override val endOffset: Int,
override var origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol,
override val isFakeOverride: Boolean
override var isFakeOverride: Boolean
) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
Fir2IrComponents by components {
override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override val isTailrec: Boolean
override var isTailrec: Boolean
get() = fir.isTailRec
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isSuspend: Boolean
override var isSuspend: Boolean
get() = fir.isSuspend
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isOperator: Boolean
override var isOperator: Boolean
get() = fir.isOperator
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isInfix: Boolean
override var isInfix: Boolean
get() = fir.isInfix
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
@ObsoleteDescriptorBasedAPI
override val descriptor: FunctionDescriptor
get() = symbol.descriptor
override val isInline: Boolean
override var isInline: Boolean
get() = fir.isInline
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExternal: Boolean
override var isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
override var isExpect: Boolean
get() = fir.isExpect
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var body: IrBody? by lazyVar(lock) {
if (tryLoadIr()) body else null
@@ -78,8 +98,11 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
components.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
}
override val modality: Modality
override var modality: Modality
get() = fir.modality!!
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var correspondingPropertySymbol: IrPropertySymbol? = null
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.lazy
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.declarations.*
@@ -83,29 +82,53 @@ class Fir2IrLazyClass(
error("Mutating Fir2Ir lazy elements is not possible")
}
override val kind: ClassKind
override var kind: ClassKind
get() = fir.classKind
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isCompanion: Boolean
override var isCompanion: Boolean
get() = fir.isCompanion
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isInner: Boolean
override var isInner: Boolean
get() = fir.isInner
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isData: Boolean
override var isData: Boolean
get() = fir.isData
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExternal: Boolean
override var isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isValue: Boolean
override var isValue: Boolean
get() = fir.isInline
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
override var isExpect: Boolean
get() = fir.isExpect
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isFun: Boolean
override var isFun: Boolean
get() = fir.isFun
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var superTypes: List<IrType> by lazyVar(lock) {
fir.superTypeRefs.map { it.toIrType(typeConverter) }
@@ -46,21 +46,33 @@ class Fir2IrLazyConstructor(
override lateinit var typeParameters: List<IrTypeParameter>
override lateinit var parent: IrDeclarationParent
override val isPrimary: Boolean
override var isPrimary: Boolean
get() = fir.isPrimary
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
@ObsoleteDescriptorBasedAPI
override val descriptor: ClassConstructorDescriptor
get() = symbol.descriptor
override val isInline: Boolean
override var isInline: Boolean
get() = fir.isInline
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExternal: Boolean
override var isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
override var isExpect: Boolean
get() = fir.isExpect
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var body: IrBody? = null
@@ -39,7 +39,7 @@ class Fir2IrLazyProperty(
override val fir: FirProperty,
val containingClass: FirRegularClass?,
override val symbol: Fir2IrPropertySymbol,
override val isFakeOverride: Boolean
override var isFakeOverride: Boolean
) : IrProperty(), AbstractFir2IrLazyDeclaration<FirProperty>, Fir2IrComponents by components {
init {
symbol.bind(this)
@@ -53,23 +53,41 @@ class Fir2IrLazyProperty(
override val descriptor: PropertyDescriptor
get() = symbol.descriptor
override val isVar: Boolean
override var isVar: Boolean
get() = fir.isVar
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isConst: Boolean
override var isConst: Boolean
get() = fir.isConst
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isLateinit: Boolean
override var isLateinit: Boolean
get() = fir.isLateInit
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isDelegated: Boolean
override var isDelegated: Boolean
get() = fir.delegate != null
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExternal: Boolean
override var isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
override var isExpect: Boolean
get() = fir.isExpect
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var name: Name
get() = fir.name
@@ -83,8 +101,11 @@ class Fir2IrLazyProperty(
error("Mutating Fir2Ir lazy elements is not possible")
}
override val modality: Modality
override var modality: Modality
get() = fir.modality!!
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
private val type: IrType by lazy {
with(typeConverter) { fir.returnTypeRef.toIrType() }
@@ -44,8 +44,11 @@ class Fir2IrLazyPropertyAccessor(
get() = firAccessor ?: firParentProperty
// TODO: investigate why some deserialized properties are inline
override val isInline: Boolean
override var isInline: Boolean
get() = firAccessor?.isInline == true
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override var annotations: List<IrConstructorCall> by createLazyAnnotations()