Raw FIR: make component call a function call, its argument -> receiver
This commit is contained in:
@@ -868,8 +868,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
|
||||
override fun visitComponentCall(componentCall: FirComponentCall) {
|
||||
componentCall.annotations.renderAnnotations()
|
||||
print("component${componentCall.componentIndex}")
|
||||
visitCall(componentCall)
|
||||
componentCall.explicitReceiver.accept(this)
|
||||
print(".component${componentCall.componentIndex}()")
|
||||
}
|
||||
|
||||
override fun visitGetClassCall(getClassCall: FirGetClassCall) {
|
||||
|
||||
@@ -7,10 +7,12 @@ package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirComponentCall : FirCall {
|
||||
interface FirComponentCall : FirFunctionCall {
|
||||
// Starting from 1, not from 0
|
||||
val componentIndex: Int
|
||||
|
||||
override val explicitReceiver: FirExpression
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitComponentCall(this, data)
|
||||
}
|
||||
+29
-2
@@ -6,11 +6,38 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirComponentCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val componentIndex: Int
|
||||
) : FirAbstractCall(session, psi), FirComponentCall
|
||||
override val componentIndex: Int,
|
||||
override var explicitReceiver: FirExpression
|
||||
) : FirAbstractCall(session, psi), FirComponentCall {
|
||||
override var calleeReference: FirNamedReference =
|
||||
FirSimpleNamedReference(session, psi, Name.identifier("component$componentIndex"))
|
||||
|
||||
override val typeArguments: List<FirTypeProjection>
|
||||
get() = emptyList()
|
||||
|
||||
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
explicitReceiver = explicitReceiver.transformSingle(transformer, data)
|
||||
return super<FirAbstractCall>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -212,10 +212,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformCall(arraySetCall, data)
|
||||
}
|
||||
|
||||
open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(componentCall, data)
|
||||
}
|
||||
|
||||
open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(delegatedConstructorCall, data)
|
||||
}
|
||||
@@ -224,6 +220,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformCall(functionCall, data)
|
||||
}
|
||||
|
||||
open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformFunctionCall(componentCall, data)
|
||||
}
|
||||
|
||||
open fun transformGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(getClassCall, data)
|
||||
}
|
||||
|
||||
@@ -212,10 +212,6 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitCall(arraySetCall, data)
|
||||
}
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall, data: D): R {
|
||||
return visitCall(componentCall, data)
|
||||
}
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R {
|
||||
return visitCall(delegatedConstructorCall, data)
|
||||
}
|
||||
@@ -224,6 +220,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitCall(functionCall, data)
|
||||
}
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall, data: D): R {
|
||||
return visitFunctionCall(componentCall, data)
|
||||
}
|
||||
|
||||
open fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): R {
|
||||
return visitCall(getClassCall, data)
|
||||
}
|
||||
|
||||
+4
-4
@@ -212,10 +212,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitCall(arraySetCall, null)
|
||||
}
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall) {
|
||||
visitCall(componentCall, null)
|
||||
}
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
visitCall(delegatedConstructorCall, null)
|
||||
}
|
||||
@@ -224,6 +220,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitCall(functionCall, null)
|
||||
}
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall) {
|
||||
visitFunctionCall(componentCall, null)
|
||||
}
|
||||
|
||||
open fun visitGetClassCall(getClassCall: FirGetClassCall) {
|
||||
visitCall(getClassCall, null)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user