[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
origin = FirDeclarationOrigin.Source
body = firBlock ?: buildEmptyExpressionBlock()
dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull()
}
}
@@ -1815,6 +1815,7 @@ open class RawFirBuilder(
moduleData = baseModuleData
origin = FirDeclarationOrigin.Source
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.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 <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.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,
)
}
@@ -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<FirAnnotation> get() = emptyList()
override var controlFlowGraphReference: FirControlFlowGraphReference? = null
@@ -428,7 +428,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
needTransformOtherChildren()
}
functionTypeParameter.configure {
+field("name", nameType, nullable = true)
+field("returnTypeRef", typeRef)
@@ -449,6 +448,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousInitializer.configure {
+body(nullable = true, withReplace = true)
+symbol("FirAnonymousInitializerSymbol")
+field("dispatchReceiverType", coneSimpleKotlinTypeType, nullable = true)
}
file.configure {