[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)
     }