[IR] Drop most laziness in lazy IR
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt
index b9e5c6a..fbde9c6 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt
@@ -13,12 +13,10 @@
import org.jetbrains.kotlin.ir.declarations.IrFactory
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase
-import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
-import kotlin.properties.ReadWriteProperty
interface AbstractFir2IrLazyDeclaration<F> :
IrDeclaration, IrLazyDeclarationBase, Fir2IrComponents where F : FirDeclaration {
@@ -28,13 +26,13 @@
override val factory: IrFactory
get() = IrFactoryImpl
- override fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> = lazyVar(lock) {
+ fun createNonLazyAnnotations(): List<IrConstructorCall> {
// Normally lazy resolve would be not necessary here,
// but in context of Kotlin project itself opened in IDE we can have here
// an annotated built-in function in sources, like arrayOfNull (KT-70856).
// For any other project, built-ins functions come from libraries and it's not actual.
fir.lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS)
- fir.annotations.mapNotNull {
+ return fir.annotations.mapNotNull {
callGenerator.convertToIrConstructorCall(it) as? IrConstructorCall
}
}
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt
index bbeb79b..177ac93 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt
@@ -33,6 +33,7 @@
override val symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
override var isFakeOverride: Boolean,
+ override val fir: F,
) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
Fir2IrComponents by c {
@@ -85,7 +86,7 @@
}
@Suppress("LeakingThis")
- override var visibility: DescriptorVisibility by lazyVar(lock) {
+ override var visibility: DescriptorVisibility = run {
c.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
}
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt
index 6641e0c..f78cf0c 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt
@@ -59,7 +59,7 @@
}
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter>
override val source: SourceElement
@@ -126,11 +126,11 @@
get() = fir.hasEnumEntries
set(_) = mutationNotSupported()
- override var superTypes: List<IrType> by lazyVar(lock) {
+ override var superTypes: List<IrType> = run {
fir.superTypeRefs.map { it.toIrType(typeConverter) }
}
- override var sealedSubclasses: List<IrClassSymbol> by lazyVar(lock) {
+ override var sealedSubclasses: List<IrClassSymbol> = run {
if (fir.isSealed) {
fir.getIrSymbolsForSealedSubclasses(c)
} else {
@@ -138,7 +138,7 @@
}
}
- override var thisReceiver: IrValueParameter? by lazyVar(lock) {
+ override var thisReceiver: IrValueParameter? = run {
setThisReceiver(c, fir.typeParameters)
thisReceiver
}
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt
index 1e8f91f..00f35c8 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt
@@ -48,7 +48,7 @@
this.contextReceiverParametersCount = fir.contextParameters.size
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter>
override var isPrimary: Boolean
@@ -80,7 +80,7 @@
override var visibility: DescriptorVisibility = c.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
set(_) = mutationNotSupported()
- override var returnType: IrType by lazyVar(lock) {
+ override var returnType: IrType = run {
fir.returnTypeRef.toIrType(typeConverter)
}
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyField.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyField.kt
index c83201e..811c409 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyField.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyField.kt
@@ -49,7 +49,7 @@
symbol.bind(this)
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
@@ -78,7 +78,7 @@
get() = fir.returnTypeRef.toIrType(c)
set(_) = mutationNotSupported()
- override var initializer: IrExpressionBody? by lazyVar(lock) {
+ override var initializer: IrExpressionBody? = run {
val field = fir.unwrapFakeOverrides()
val evaluatedInitializer = (field.propertyIfBackingField as? FirProperty)?.evaluatedInitializer?.unwrapOr<FirExpression> {}
when (val initializer = evaluatedInitializer ?: field.initializer) {
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt
index 344c157..49370ed 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt
@@ -63,7 +63,7 @@
classifierStorage.preCacheTypeParameters(fir)
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt
index 754bd29..6536ac8 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt
@@ -37,30 +37,27 @@
parent: IrDeclarationParent,
isFakeOverride: Boolean,
override var correspondingPropertySymbol: IrPropertySymbol?
-) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(c, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
+) : AbstractFir2IrLazyFunction<FirCallableDeclaration>(c, startOffset, endOffset, origin, symbol, parent, isFakeOverride,firAccessor ?: firParentProperty) {
init {
symbol.bind(this)
this.contextReceiverParametersCount = fir.contextParametersForFunctionOrContainingProperty().size
}
- override val fir: FirCallableDeclaration
- get() = firAccessor ?: firParentProperty
-
// TODO: investigate why some deserialized properties are inline
override var isInline: Boolean
get() = firAccessor?.isInline == true
set(_) = mutationNotSupported()
- override var annotations: List<IrConstructorCall> by when {
- firAccessor != null -> createLazyAnnotations()
- else -> lazyVar<List<IrConstructorCall>>(lock) { emptyList() }
+ override var annotations: List<IrConstructorCall> = when {
+ firAccessor != null -> createNonLazyAnnotations()
+ else -> emptyList()
}
override var name: Name
get() = Name.special("<${if (isSetter) "set" else "get"}-${firParentProperty.name}>")
set(_) = mutationNotSupported()
- override var returnType: IrType by lazyVar(lock) {
+ override var returnType: IrType = run {
if (isSetter) builtins.unitType else firParentProperty.returnTypeRef.toIrType(typeConverter, conversionTypeContext)
}
@@ -107,5 +104,5 @@
override val containerSource: DeserializedContainerSource?
get() = firParentProperty.containerSource
- private val conversionTypeContext = if (isSetter) ConversionTypeOrigin.SETTER else ConversionTypeOrigin.DEFAULT
+ private val conversionTypeContext get() = if (isSetter) ConversionTypeOrigin.SETTER else ConversionTypeOrigin.DEFAULT
}
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt
index 9e38803..a5c74f9f 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt
@@ -26,19 +26,19 @@
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
- override val fir: FirSimpleFunction,
+ fir: FirSimpleFunction,
private val firParent: FirRegularClass?,
symbol: IrSimpleFunctionSymbol,
parent: IrDeclarationParent,
isFakeOverride: Boolean
-) : AbstractFir2IrLazyFunction<FirSimpleFunction>(c, startOffset, endOffset, origin, symbol, parent, isFakeOverride) {
+) : AbstractFir2IrLazyFunction<FirSimpleFunction>(c, startOffset, endOffset, origin, symbol, parent, isFakeOverride, fir) {
init {
symbol.bind(this)
classifierStorage.preCacheTypeParameters(fir)
this.contextReceiverParametersCount = fir.contextParametersForFunctionOrContainingProperty().size
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
override var name: Name
get() = fir.name
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyTypeAlias.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyTypeAlias.kt
index c914936..484106f 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyTypeAlias.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyTypeAlias.kt
@@ -39,7 +39,7 @@
classifierStorage.preCacheTypeParameters(fir)
}
- override var annotations: List<IrConstructorCall> by createLazyAnnotations()
+ override var annotations: List<IrConstructorCall> = createNonLazyAnnotations()
override lateinit var typeParameters: List<IrTypeParameter>
@ObsoleteDescriptorBasedAPI
@@ -57,7 +57,7 @@
get() = fir.isActual
set(_) = mutationNotSupported()
- override var expandedType: IrType by lazyVar(lock) {
+ override var expandedType: IrType = run {
fir.expandedTypeRef.toIrType(typeConverter)
}