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 {
|
typeRef = buildResolvedTypeRef {
|
||||||
this.type = type
|
this.type = type
|
||||||
}
|
}
|
||||||
|
isImplicit = true
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImplicitDispatchReceiverValue internal constructor(
|
class ImplicitDispatchReceiverValue internal constructor(
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ object CheckDslScopeViolation : ResolutionStage() {
|
|||||||
(candidate.symbol as? FirNamedFunctionSymbol)?.name == OperatorNameConventions.INVOKE
|
(candidate.symbol as? FirNamedFunctionSymbol)?.name == OperatorNameConventions.INVOKE
|
||||||
) {
|
) {
|
||||||
val firstArg = candidate.argumentMapping?.keys?.firstOrNull() as? FirThisReceiverExpression ?: return
|
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(
|
firstArg.checkImpl(
|
||||||
candidate,
|
candidate,
|
||||||
sink,
|
sink,
|
||||||
|
|||||||
+1
@@ -28,6 +28,7 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
|
|||||||
abstract override val dispatchReceiver: FirExpression
|
abstract override val dispatchReceiver: FirExpression
|
||||||
abstract override val extensionReceiver: FirExpression
|
abstract override val extensionReceiver: FirExpression
|
||||||
abstract override val calleeReference: FirThisReference
|
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)
|
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 annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||||
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
|
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
|
||||||
lateinit var calleeReference: FirThisReference
|
lateinit var calleeReference: FirThisReference
|
||||||
|
var isImplicit: Boolean = false
|
||||||
|
|
||||||
override fun build(): FirThisReceiverExpression {
|
override fun build(): FirThisReceiverExpression {
|
||||||
return FirThisReceiverExpressionImpl(
|
return FirThisReceiverExpressionImpl(
|
||||||
@@ -44,6 +45,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
|
|||||||
annotations,
|
annotations,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
calleeReference,
|
calleeReference,
|
||||||
|
isImplicit,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -28,6 +28,7 @@ internal class FirThisReceiverExpressionImpl(
|
|||||||
override val annotations: MutableList<FirAnnotation>,
|
override val annotations: MutableList<FirAnnotation>,
|
||||||
override val typeArguments: MutableList<FirTypeProjection>,
|
override val typeArguments: MutableList<FirTypeProjection>,
|
||||||
override var calleeReference: FirThisReference,
|
override var calleeReference: FirThisReference,
|
||||||
|
override val isImplicit: Boolean,
|
||||||
) : FirThisReceiverExpression() {
|
) : FirThisReceiverExpression() {
|
||||||
override var explicitReceiver: FirExpression? = null
|
override var explicitReceiver: FirExpression? = null
|
||||||
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
||||||
|
|||||||
+1
@@ -221,6 +221,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
|
|
||||||
builder(thisReceiverExpression) {
|
builder(thisReceiverExpression) {
|
||||||
parents += qualifiedAccessBuilder
|
parents += qualifiedAccessBuilder
|
||||||
|
default("isImplicit", "false")
|
||||||
}
|
}
|
||||||
|
|
||||||
builder(variableAssignment) {
|
builder(variableAssignment) {
|
||||||
|
|||||||
+1
@@ -625,6 +625,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
|
|
||||||
thisReceiverExpression.configure {
|
thisReceiverExpression.configure {
|
||||||
+field("calleeReference", thisReference)
|
+field("calleeReference", thisReference)
|
||||||
|
+booleanField("isImplicit")
|
||||||
}
|
}
|
||||||
|
|
||||||
whenExpression.configure {
|
whenExpression.configure {
|
||||||
|
|||||||
Reference in New Issue
Block a user