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 f6deec047c5..b5c37483310 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 @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.hasAnnotation import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.lazy.AbstractIrLazyFunction import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.expressions.IrBody @@ -24,7 +25,6 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.DeserializableClass import org.jetbrains.kotlin.ir.util.isFacadeClass import org.jetbrains.kotlin.ir.util.isObject import org.jetbrains.kotlin.name.ClassId @@ -38,7 +38,7 @@ abstract class AbstractFir2IrLazyFunction( override var origin: IrDeclarationOrigin, override val symbol: IrSimpleFunctionSymbol, override var isFakeOverride: Boolean -) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration, Fir2IrTypeParametersContainer, IrLazyFunctionBase, +) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration, Fir2IrTypeParametersContainer, IrLazyFunctionBase, Fir2IrComponents by components { override lateinit var typeParameters: List @@ -120,11 +120,11 @@ abstract class AbstractFir2IrLazyFunction( return super.createLazyAnnotations() } - private fun tryLoadIr(): Boolean { - if (!isInline || isFakeOverride) return false - if (!extensions.irNeedsDeserialization) return false - val toplevel = getTopLevelDeclaration() - return (toplevel as? DeserializableClass)?.loadIr() ?: false + override val isDeserializationEnabled: Boolean + get() = extensions.irNeedsDeserialization + + override fun lazyParent(): IrDeclarationParent { + return super.lazyParent() } companion object { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/AbstractIrLazyFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/AbstractIrLazyFunction.kt new file mode 100644 index 00000000000..90e67f0a39f --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/AbstractIrLazyFunction.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.declarations.lazy + +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.util.DeserializableClass + +abstract class AbstractIrLazyFunction : IrSimpleFunction(), IrLazyFunctionBase { + abstract val isDeserializationEnabled: Boolean + + fun tryLoadIr(): Boolean { + if (!isInline || isFakeOverride) return false + if (!isDeserializationEnabled) return false + val toplevel = getTopLevelDeclaration() + return (toplevel as? DeserializableClass)?.loadIr() ?: false + } +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt index 611e87fd14f..4644880e80e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator -import org.jetbrains.kotlin.ir.util.DeserializableClass import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.util.withScope import org.jetbrains.kotlin.name.Name @@ -44,7 +43,7 @@ class IrLazyFunction( override var isInfix: Boolean, override val stubGenerator: DeclarationStubGenerator, override val typeTranslator: TypeTranslator, -) : IrSimpleFunction(), IrLazyFunctionBase { +) : AbstractIrLazyFunction(), IrLazyFunctionBase { override var parent: IrDeclarationParent by createLazyParent() override var annotations: List by createLazyAnnotations() @@ -110,12 +109,8 @@ class IrLazyFunction( override val containerSource: DeserializedContainerSource? get() = (descriptor as? DescriptorWithContainerSource)?.containerSource - private fun tryLoadIr(): Boolean { - if (!stubGenerator.extensions.irDeserializationEnabled) return false - if (!isInline || isFakeOverride) return false - val toplevel = getTopLevelDeclaration() - return (toplevel as? DeserializableClass)?.loadIr() ?: false - } + override val isDeserializationEnabled: Boolean + get() = stubGenerator.extensions.irDeserializationEnabled init { symbol.bind(this)