From 9ccbf8639d603a7ae076f74a380e82f26fe84d62 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 15 Dec 2022 14:56:13 +0200 Subject: [PATCH] [FIR] Add dispatchReceiverType to FirAnonymousInitializer This is needed to add ability to quickly find class to which initializer belongs --- .../kotlin/fir/lightTree/converter/DeclarationsConverter.kt | 1 + .../src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 1 + .../kotlin/fir/declarations/FirAnonymousInitializer.kt | 2 ++ .../fir/declarations/builder/FirAnonymousInitializerBuilder.kt | 3 +++ .../fir/declarations/impl/FirAnonymousInitializerImpl.kt | 2 ++ .../jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt | 2 +- 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 1c8c61b1178..66033f85ecb 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -959,6 +959,7 @@ class DeclarationsConverter( moduleData = baseModuleData origin = FirDeclarationOrigin.Source body = firBlock ?: buildEmptyExpressionBlock() + dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull() } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index fb1017808a9..2cfdc50a94c 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1815,6 +1815,7 @@ open class RawFirBuilder( moduleData = baseModuleData origin = FirDeclarationOrigin.Source body = buildOrLazyBlock { initializer.body.toFirBlock() } + dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull() } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt index 696be542708..2e64f22b5cd 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol +import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.visitors.* /* @@ -29,6 +30,7 @@ abstract class FirAnonymousInitializer : FirDeclaration(), FirControlFlowGraphOw abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract val body: FirBlock? abstract override val symbol: FirAnonymousInitializerSymbol + abstract val dispatchReceiverType: ConeSimpleKotlinType? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousInitializer(this, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt index c6783136542..393df4dec10 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousInitializerBuilder.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol +import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.visitors.* /* @@ -38,6 +39,7 @@ class FirAnonymousInitializerBuilder : FirDeclarationBuilder, FirAnnotationConta override var attributes: FirDeclarationAttributes = FirDeclarationAttributes() var body: FirBlock? = null var symbol: FirAnonymousInitializerSymbol = FirAnonymousInitializerSymbol() + var dispatchReceiverType: ConeSimpleKotlinType? = null override fun build(): FirAnonymousInitializer { return FirAnonymousInitializerImpl( @@ -48,6 +50,7 @@ class FirAnonymousInitializerBuilder : FirDeclarationBuilder, FirAnnotationConta attributes, body, symbol, + dispatchReceiverType, ) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt index 6d3f6a1340a..dfd6acbbcea 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol +import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.visitors.* /* @@ -33,6 +34,7 @@ internal class FirAnonymousInitializerImpl( override val attributes: FirDeclarationAttributes, override var body: FirBlock?, override val symbol: FirAnonymousInitializerSymbol, + override val dispatchReceiverType: ConeSimpleKotlinType?, ) : FirAnonymousInitializer() { override val annotations: List get() = emptyList() override var controlFlowGraphReference: FirControlFlowGraphReference? = null diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 83edfc87932..76cae31081a 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -428,7 +428,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild needTransformOtherChildren() } - functionTypeParameter.configure { +field("name", nameType, nullable = true) +field("returnTypeRef", typeRef) @@ -449,6 +448,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild anonymousInitializer.configure { +body(nullable = true, withReplace = true) +symbol("FirAnonymousInitializerSymbol") + +field("dispatchReceiverType", coneSimpleKotlinTypeType, nullable = true) } file.configure {