[FIR] Fix NO_RECEIVER_ALLOWED
If we do create an implicit invoke call, and then put the receiver into the argument list, we should mark it.
This commit is contained in:
committed by
Space Team
parent
eb11901d43
commit
9b786d35f8
@@ -36,6 +36,7 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
|
||||
abstract override val argumentList: FirArgumentList
|
||||
abstract override val calleeReference: FirNamedReference
|
||||
abstract override val origin: FirFunctionCallOrigin
|
||||
abstract val isCallWithExplicitReceiver: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitImplicitInvokeCall(this, data)
|
||||
|
||||
+2
@@ -35,6 +35,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
|
||||
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
|
||||
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
||||
override lateinit var calleeReference: FirNamedReference
|
||||
open var isCallWithExplicitReceiver: Boolean = false
|
||||
|
||||
override fun build(): FirImplicitInvokeCall {
|
||||
return FirImplicitInvokeCallImpl(
|
||||
@@ -49,6 +50,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
|
||||
nonFatalDiagnostics.toMutableOrEmpty(),
|
||||
argumentList,
|
||||
calleeReference,
|
||||
isCallWithExplicitReceiver,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -38,6 +38,7 @@ internal class FirImplicitInvokeCallImpl(
|
||||
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
|
||||
override var argumentList: FirArgumentList,
|
||||
override var calleeReference: FirNamedReference,
|
||||
override val isCallWithExplicitReceiver: Boolean,
|
||||
) : FirImplicitInvokeCall() {
|
||||
override val origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Operator
|
||||
|
||||
|
||||
+4
-1
@@ -227,7 +227,10 @@ object BuilderConfigurator : AbstractFirBuilderConfigurator<FirTreeBuilder>(FirT
|
||||
}
|
||||
}
|
||||
builder(integerLiteralOperatorCall, config = configurationForFunctionCallBuilder)
|
||||
builder(implicitInvokeCall, config = configurationForFunctionCallBuilder)
|
||||
builder(implicitInvokeCall) {
|
||||
configurationForFunctionCallBuilder()
|
||||
defaultFalse("isCallWithExplicitReceiver")
|
||||
}
|
||||
|
||||
builder(getClassCall) {
|
||||
parents += callBuilder
|
||||
|
||||
+4
@@ -408,6 +408,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
shouldBeAnInterface()
|
||||
}
|
||||
|
||||
implicitInvokeCall.configure {
|
||||
+booleanField("isCallWithExplicitReceiver")
|
||||
}
|
||||
|
||||
constructor.configure {
|
||||
+annotations
|
||||
+symbol("FirConstructorSymbol")
|
||||
|
||||
Reference in New Issue
Block a user