FIR2IR: Support initialSignatureDescriptor
It will be used for overrides of renamed special built-ins during signature mapping to obtain initial signature
This commit is contained in:
+19
-2
@@ -14,13 +14,18 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||||
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.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
|
||||||
|
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.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
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
|
||||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||||
|
import kotlin.properties.ReadWriteProperty
|
||||||
|
|
||||||
abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
||||||
components: Fir2IrComponents,
|
components: Fir2IrComponents,
|
||||||
@@ -29,7 +34,7 @@ abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
|||||||
override var origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: Fir2IrSimpleFunctionSymbol,
|
override val symbol: Fir2IrSimpleFunctionSymbol,
|
||||||
override val isFakeOverride: Boolean
|
override val isFakeOverride: Boolean
|
||||||
) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration<F, IrSimpleFunction>, Fir2IrComponents by components {
|
) : IrSimpleFunction(), AbstractFir2IrLazyDeclaration<F, IrSimpleFunction>, IrLazyFunctionBase, Fir2IrComponents by components {
|
||||||
|
|
||||||
override lateinit var typeParameters: List<IrTypeParameter>
|
override lateinit var typeParameters: List<IrTypeParameter>
|
||||||
override lateinit var parent: IrDeclarationParent
|
override lateinit var parent: IrDeclarationParent
|
||||||
@@ -94,7 +99,19 @@ abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val stubGenerator: DeclarationStubGenerator
|
||||||
|
get() = error("Should not be called")
|
||||||
|
override val typeTranslator: TypeTranslator
|
||||||
|
get() = error("Should not be called")
|
||||||
|
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = super<AbstractFir2IrLazyDeclaration>.factory
|
||||||
|
|
||||||
|
override fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> {
|
||||||
|
return super<AbstractFir2IrLazyDeclaration>.createLazyAnnotations()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val JVM_STATIC_CLASS_ID = ClassId.topLevel(JVM_STATIC_ANNOTATION_FQ_NAME)
|
private val JVM_STATIC_CLASS_ID = ClassId.topLevel(JVM_STATIC_ANNOTATION_FQ_NAME)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lazy
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
@@ -81,7 +82,18 @@ class Fir2IrLazyPropertyAccessor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar {
|
override var overriddenSymbols: List<IrSimpleFunctionSymbol> by lazyVar {
|
||||||
firParentProperty.generateOverriddenAccessorSymbols(firParentClass, !isSetter, session, scopeSession, declarationStorage)
|
firParentProperty.generateOverriddenAccessorSymbols(
|
||||||
|
firParentClass,
|
||||||
|
!isSetter,
|
||||||
|
session,
|
||||||
|
scopeSession,
|
||||||
|
declarationStorage,
|
||||||
|
fakeOverrideGenerator
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val initialSignatureFunction: IrFunction? by lazy {
|
||||||
|
(fir as? FirSyntheticPropertyAccessor)?.delegate?.let { declarationStorage.getIrFunctionSymbol(it.symbol).owner }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val containerSource: DeserializedContainerSource?
|
override val containerSource: DeserializedContainerSource?
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lazy
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.initialSignatureAttr
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||||
@@ -72,7 +73,11 @@ class Fir2IrLazySimpleFunction(
|
|||||||
parent.declarations
|
parent.declarations
|
||||||
fakeOverrideGenerator.getOverriddenSymbols(this)?.let { return@lazyVar it }
|
fakeOverrideGenerator.getOverriddenSymbols(this)?.let { return@lazyVar it }
|
||||||
}
|
}
|
||||||
fir.generateOverriddenFunctionSymbols(firParent, session, scopeSession, declarationStorage)
|
fir.generateOverriddenFunctionSymbols(firParent, session, scopeSession, declarationStorage, fakeOverrideGenerator)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val initialSignatureFunction: IrFunction? by lazy {
|
||||||
|
(fir.initialSignatureAttr as? FirFunction<*>)?.symbol?.let { declarationStorage.getIrFunctionSymbol(it).owner }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val containerSource: DeserializedContainerSource?
|
override val containerSource: DeserializedContainerSource?
|
||||||
|
|||||||
+8
-1
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
|
||||||
|
import org.jetbrains.kotlin.fir.initialSignatureAttr
|
||||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
@@ -55,7 +56,13 @@ class FirSignatureEnhancement(
|
|||||||
function: FirFunctionSymbol<*>,
|
function: FirFunctionSymbol<*>,
|
||||||
name: Name?
|
name: Name?
|
||||||
): FirFunctionSymbol<*> {
|
): FirFunctionSymbol<*> {
|
||||||
return enhancements.getOrPut(function) { enhance(function, name) } as FirFunctionSymbol<*>
|
return enhancements.getOrPut(function) {
|
||||||
|
enhance(function, name).also { enhancedVersion ->
|
||||||
|
(enhancedVersion.fir.initialSignatureAttr as? FirSimpleFunction)?.let {
|
||||||
|
enhancedVersion.fir.initialSignatureAttr = enhancedFunction(it.symbol, it.name).fir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as FirFunctionSymbol<*>
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enhancedProperty(property: FirVariableSymbol<*>, name: Name): FirVariableSymbol<*> {
|
fun enhancedProperty(property: FirVariableSymbol<*>, name: Name): FirVariableSymbol<*> {
|
||||||
|
|||||||
@@ -70,3 +70,6 @@ var <D : FirCallableDeclaration<*>>
|
|||||||
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
||||||
var <D : FirCallableDeclaration<*>>
|
var <D : FirCallableDeclaration<*>>
|
||||||
D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey)
|
D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey)
|
||||||
|
|
||||||
|
private object InitialSignatureKey : FirDeclarationDataKey()
|
||||||
|
var FirCallableDeclaration<*>.initialSignatureAttr: FirCallableDeclaration<*>? by FirDeclarationDataRegistry.data(InitialSignatureKey)
|
||||||
|
|||||||
Reference in New Issue
Block a user