IR: extract AbstractIrLazyFunction and tryLoadIr

This commit is contained in:
Mikhail Glukhikh
2023-02-17 11:50:23 +01:00
committed by Space Team
parent f075c9d50b
commit 37838963c6
3 changed files with 30 additions and 15 deletions
@@ -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<F : FirCallableDeclaration>(
override var origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol,
override var isFakeOverride: Boolean
) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
Fir2IrComponents by components {
override lateinit var typeParameters: List<IrTypeParameter>
@@ -120,11 +120,11 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
return super<AbstractFir2IrLazyDeclaration>.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<AbstractFir2IrLazyDeclaration>.lazyParent()
}
companion object {
@@ -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
}
}
@@ -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<IrConstructorCall> 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)