[FIR] Add dispatchReceiverType to FirAnonymousInitializer

This is needed to add ability to quickly find class to which initializer
  belongs
This commit is contained in:
Dmitriy Novozhilov
2022-12-15 14:56:13 +02:00
committed by Space Team
parent edd7468d5b
commit 9ccbf8639d
6 changed files with 10 additions and 1 deletions
@@ -959,6 +959,7 @@ class DeclarationsConverter(
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
body = firBlock ?: buildEmptyExpressionBlock() body = firBlock ?: buildEmptyExpressionBlock()
dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull()
} }
} }
@@ -1815,6 +1815,7 @@ open class RawFirBuilder(
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
body = buildOrLazyBlock { initializer.body.toFirBlock() } body = buildOrLazyBlock { initializer.body.toFirBlock() }
dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull()
} }
} }
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -29,6 +30,7 @@ abstract class FirAnonymousInitializer : FirDeclaration(), FirControlFlowGraphOw
abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract val body: FirBlock? abstract val body: FirBlock?
abstract override val symbol: FirAnonymousInitializerSymbol abstract override val symbol: FirAnonymousInitializerSymbol
abstract val dispatchReceiverType: ConeSimpleKotlinType?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousInitializer(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousInitializer(this, data)
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -38,6 +39,7 @@ class FirAnonymousInitializerBuilder : FirDeclarationBuilder, FirAnnotationConta
override var attributes: FirDeclarationAttributes = FirDeclarationAttributes() override var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
var body: FirBlock? = null var body: FirBlock? = null
var symbol: FirAnonymousInitializerSymbol = FirAnonymousInitializerSymbol() var symbol: FirAnonymousInitializerSymbol = FirAnonymousInitializerSymbol()
var dispatchReceiverType: ConeSimpleKotlinType? = null
override fun build(): FirAnonymousInitializer { override fun build(): FirAnonymousInitializer {
return FirAnonymousInitializerImpl( return FirAnonymousInitializerImpl(
@@ -48,6 +50,7 @@ class FirAnonymousInitializerBuilder : FirDeclarationBuilder, FirAnnotationConta
attributes, attributes,
body, body,
symbol, symbol,
dispatchReceiverType,
) )
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -33,6 +34,7 @@ internal class FirAnonymousInitializerImpl(
override val attributes: FirDeclarationAttributes, override val attributes: FirDeclarationAttributes,
override var body: FirBlock?, override var body: FirBlock?,
override val symbol: FirAnonymousInitializerSymbol, override val symbol: FirAnonymousInitializerSymbol,
override val dispatchReceiverType: ConeSimpleKotlinType?,
) : FirAnonymousInitializer() { ) : FirAnonymousInitializer() {
override val annotations: List<FirAnnotation> get() = emptyList() override val annotations: List<FirAnnotation> get() = emptyList()
override var controlFlowGraphReference: FirControlFlowGraphReference? = null override var controlFlowGraphReference: FirControlFlowGraphReference? = null
@@ -428,7 +428,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
needTransformOtherChildren() needTransformOtherChildren()
} }
functionTypeParameter.configure { functionTypeParameter.configure {
+field("name", nameType, nullable = true) +field("name", nameType, nullable = true)
+field("returnTypeRef", typeRef) +field("returnTypeRef", typeRef)
@@ -449,6 +448,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousInitializer.configure { anonymousInitializer.configure {
+body(nullable = true, withReplace = true) +body(nullable = true, withReplace = true)
+symbol("FirAnonymousInitializerSymbol") +symbol("FirAnonymousInitializerSymbol")
+field("dispatchReceiverType", coneSimpleKotlinTypeType, nullable = true)
} }
file.configure { file.configure {