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.ir.ObsoleteDescriptorBasedAPI
|
||||
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.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
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.name.ClassId
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||
import kotlin.properties.ReadWriteProperty
|
||||
|
||||
abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
||||
components: Fir2IrComponents,
|
||||
@@ -29,7 +34,7 @@ abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
||||
override var origin: IrDeclarationOrigin,
|
||||
override val symbol: Fir2IrSimpleFunctionSymbol,
|
||||
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 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 {
|
||||
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.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||
@@ -81,7 +82,18 @@ class Fir2IrLazyPropertyAccessor(
|
||||
}
|
||||
|
||||
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?
|
||||
|
||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lazy
|
||||
|
||||
import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.initialSignatureAttr
|
||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
|
||||
@@ -72,7 +73,11 @@ class Fir2IrLazySimpleFunction(
|
||||
parent.declarations
|
||||
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?
|
||||
|
||||
+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.synthetic.FirSyntheticProperty
|
||||
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.declarations.*
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
@@ -55,7 +56,13 @@ class FirSignatureEnhancement(
|
||||
function: FirFunctionSymbol<*>,
|
||||
name: Name?
|
||||
): 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<*> {
|
||||
|
||||
@@ -70,3 +70,6 @@ var <D : FirCallableDeclaration<*>>
|
||||
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
||||
var <D : FirCallableDeclaration<*>>
|
||||
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