IR: extract AbstractIrLazyFunction and tryLoadIr
This commit is contained in:
committed by
Space Team
parent
f075c9d50b
commit
37838963c6
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.hasAnnotation
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.IrLazyFunctionBase
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
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.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
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.isFacadeClass
|
||||||
import org.jetbrains.kotlin.ir.util.isObject
|
import org.jetbrains.kotlin.ir.util.isObject
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -38,7 +38,7 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
|
|||||||
override var origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrSimpleFunctionSymbol,
|
override val symbol: IrSimpleFunctionSymbol,
|
||||||
override var isFakeOverride: Boolean
|
override var isFakeOverride: Boolean
|
||||||
) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
|
) : AbstractIrLazyFunction(), AbstractFir2IrLazyDeclaration<F>, Fir2IrTypeParametersContainer, IrLazyFunctionBase,
|
||||||
Fir2IrComponents by components {
|
Fir2IrComponents by components {
|
||||||
|
|
||||||
override lateinit var typeParameters: List<IrTypeParameter>
|
override lateinit var typeParameters: List<IrTypeParameter>
|
||||||
@@ -120,11 +120,11 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
|
|||||||
return super<AbstractFir2IrLazyDeclaration>.createLazyAnnotations()
|
return super<AbstractFir2IrLazyDeclaration>.createLazyAnnotations()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryLoadIr(): Boolean {
|
override val isDeserializationEnabled: Boolean
|
||||||
if (!isInline || isFakeOverride) return false
|
get() = extensions.irNeedsDeserialization
|
||||||
if (!extensions.irNeedsDeserialization) return false
|
|
||||||
val toplevel = getTopLevelDeclaration()
|
override fun lazyParent(): IrDeclarationParent {
|
||||||
return (toplevel as? DeserializableClass)?.loadIr() ?: false
|
return super<AbstractFir2IrLazyDeclaration>.lazyParent()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+20
@@ -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.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
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.TypeTranslator
|
||||||
import org.jetbrains.kotlin.ir.util.withScope
|
import org.jetbrains.kotlin.ir.util.withScope
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -44,7 +43,7 @@ class IrLazyFunction(
|
|||||||
override var isInfix: Boolean,
|
override var isInfix: Boolean,
|
||||||
override val stubGenerator: DeclarationStubGenerator,
|
override val stubGenerator: DeclarationStubGenerator,
|
||||||
override val typeTranslator: TypeTranslator,
|
override val typeTranslator: TypeTranslator,
|
||||||
) : IrSimpleFunction(), IrLazyFunctionBase {
|
) : AbstractIrLazyFunction(), IrLazyFunctionBase {
|
||||||
override var parent: IrDeclarationParent by createLazyParent()
|
override var parent: IrDeclarationParent by createLazyParent()
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
override var annotations: List<IrConstructorCall> by createLazyAnnotations()
|
||||||
@@ -110,12 +109,8 @@ class IrLazyFunction(
|
|||||||
override val containerSource: DeserializedContainerSource?
|
override val containerSource: DeserializedContainerSource?
|
||||||
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
get() = (descriptor as? DescriptorWithContainerSource)?.containerSource
|
||||||
|
|
||||||
private fun tryLoadIr(): Boolean {
|
override val isDeserializationEnabled: Boolean
|
||||||
if (!stubGenerator.extensions.irDeserializationEnabled) return false
|
get() = stubGenerator.extensions.irDeserializationEnabled
|
||||||
if (!isInline || isFakeOverride) return false
|
|
||||||
val toplevel = getTopLevelDeclaration()
|
|
||||||
return (toplevel as? DeserializableClass)?.loadIr() ?: false
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
|
|||||||
Reference in New Issue
Block a user