FIR: add isImplicit to FirThisReceiverExpression
This commit is contained in:
committed by
TeamCityServer
parent
a297ee66d4
commit
5ccc5591f5
@@ -124,6 +124,7 @@ private fun receiverExpression(symbol: FirBasedSymbol<*>, type: ConeKotlinType):
|
||||
typeRef = buildResolvedTypeRef {
|
||||
this.type = type
|
||||
}
|
||||
isImplicit = true
|
||||
}
|
||||
|
||||
class ImplicitDispatchReceiverValue internal constructor(
|
||||
|
||||
@@ -198,7 +198,7 @@ object CheckDslScopeViolation : ResolutionStage() {
|
||||
(candidate.symbol as? FirNamedFunctionSymbol)?.name == OperatorNameConventions.INVOKE
|
||||
) {
|
||||
val firstArg = candidate.argumentMapping?.keys?.firstOrNull() as? FirThisReceiverExpression ?: return
|
||||
if (firstArg.source != null) return // Having no source means it's implicit.
|
||||
if (!firstArg.isImplicit) return
|
||||
firstArg.checkImpl(
|
||||
candidate,
|
||||
sink,
|
||||
|
||||
+1
@@ -28,6 +28,7 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
|
||||
abstract override val dispatchReceiver: FirExpression
|
||||
abstract override val extensionReceiver: FirExpression
|
||||
abstract override val calleeReference: FirThisReference
|
||||
abstract val isImplicit: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReceiverExpression(this, data)
|
||||
|
||||
|
||||
+2
@@ -36,6 +36,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
|
||||
lateinit var calleeReference: FirThisReference
|
||||
var isImplicit: Boolean = false
|
||||
|
||||
override fun build(): FirThisReceiverExpression {
|
||||
return FirThisReceiverExpressionImpl(
|
||||
@@ -44,6 +45,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
|
||||
annotations,
|
||||
typeArguments,
|
||||
calleeReference,
|
||||
isImplicit,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -28,6 +28,7 @@ internal class FirThisReceiverExpressionImpl(
|
||||
override val annotations: MutableList<FirAnnotation>,
|
||||
override val typeArguments: MutableList<FirTypeProjection>,
|
||||
override var calleeReference: FirThisReference,
|
||||
override val isImplicit: Boolean,
|
||||
) : FirThisReceiverExpression() {
|
||||
override var explicitReceiver: FirExpression? = null
|
||||
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
||||
|
||||
+1
@@ -221,6 +221,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
|
||||
builder(thisReceiverExpression) {
|
||||
parents += qualifiedAccessBuilder
|
||||
default("isImplicit", "false")
|
||||
}
|
||||
|
||||
builder(variableAssignment) {
|
||||
|
||||
+1
@@ -625,6 +625,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
thisReceiverExpression.configure {
|
||||
+field("calleeReference", thisReference)
|
||||
+booleanField("isImplicit")
|
||||
}
|
||||
|
||||
whenExpression.configure {
|
||||
|
||||
Reference in New Issue
Block a user