[FIR] Make extensionReceiver and dispatchReceiver nullable

Get rid of FirNoReceiverExpression

^KT-59650 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-08-30 18:50:18 +03:00
committed by Space Team
parent 585c3fe4b5
commit f203681ffa
75 changed files with 292 additions and 320 deletions
@@ -212,8 +212,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
default("argumentList") {
value = "FirEmptyArgumentList"
}
default("dispatchReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("dispatchReceiver")
useTypes(emptyArgumentListType)
}
@@ -26,8 +26,8 @@ object FieldSets {
val receivers by lazy {
fieldSet(
field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(),
field("dispatchReceiver", expression, withReplace = true),
field("extensionReceiver", expression, withReplace = true)
field("dispatchReceiver", expression, nullable = true, withReplace = true),
field("extensionReceiver", expression, nullable = true, withReplace = true)
)
}
@@ -234,8 +234,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
integerLiteralOperatorCall.configure {
// we need methods for transformation of receivers
+field("dispatchReceiver", expression, withReplace = true).withTransform()
+field("extensionReceiver", expression, withReplace = true).withTransform()
+field("dispatchReceiver", expression, nullable = true, withReplace = true).withTransform()
+field("extensionReceiver", expression, nullable = true, withReplace = true).withTransform()
}
comparisonExpression.configure {
@@ -411,7 +411,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
delegatedConstructorCall.configure {
+field("constructedTypeRef", typeRef, withReplace = true)
+field("dispatchReceiver", expression, withReplace = true).withTransform()
+field("dispatchReceiver", expression, nullable = true, withReplace = true).withTransform()
+field("calleeReference", reference, withReplace = true)
generateBooleanFields("this", "super")
}
@@ -56,7 +56,6 @@ val referenceToSimpleExpressionType = generatedType("", "FirExpressionRef<FirExp
val safeCallCheckedSubjectReferenceType = generatedType("", "FirExpressionRef<FirCheckedSafeCallSubject>")
val firModuleDataType = type("fir", "FirModuleData")
val noReceiverExpressionType = generatedType("expressions.impl", "FirNoReceiverExpression", firType = true)
val firImplicitTypeWithoutSourceType = generatedType("types.impl", "FirImplicitTypeRefImplWithoutSource")
val firQualifierPartType = type("fir.types", "FirQualifierPart")
val simpleNamedReferenceType = generatedType("references.impl", "FirSimpleNamedReference")
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.tree.generator.context
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType
import org.jetbrains.kotlin.fir.tree.generator.util.DummyDelegate
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
@@ -27,9 +26,7 @@ abstract class AbstractBuilderConfigurator<T : AbstractFirTreeBuilder>(val firTr
if (!notNullExplicitReceiver) {
defaultNull("explicitReceiver")
}
default("dispatchReceiver", "FirNoReceiverExpression")
default("extensionReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("dispatchReceiver", "extensionReceiver")
}
fun default(field: String, value: String) {
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.tree.generator.context
import org.jetbrains.kotlin.fir.tree.generator.constructClassLikeTypeImport
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType
import org.jetbrains.kotlin.fir.tree.generator.printer.call
import org.jetbrains.kotlin.fir.tree.generator.standardClassIdsType
@@ -109,10 +108,7 @@ abstract class AbstractFirTreeImplementationConfigurator {
}
fun defaultNoReceivers() {
defaultNull("explicitReceiver")
default("dispatchReceiver", "FirNoReceiverExpression")
default("extensionReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("explicitReceiver", "dispatchReceiver", "extensionReceiver")
}
fun default(field: String, value: String) {
@@ -223,7 +223,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
println(
"""
|if (dispatchReceiver !== explicitReceiver) {
| dispatchReceiver = dispatchReceiver.transform(transformer, data)
| dispatchReceiver = dispatchReceiver?.transform(transformer, data)
| }
""".trimMargin(),
)
@@ -232,7 +232,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
println(
"""
|if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
| extensionReceiver = extensionReceiver.transform(transformer, data)
| extensionReceiver = extensionReceiver?.transform(transformer, data)
| }
""".trimMargin(),
)