FIR structure: include calleeReference into FirDelegatedConstructorCall

This commit is contained in:
Mikhail Glukhikh
2019-04-02 15:41:37 +03:00
parent 63d3100122
commit b3cf3c6579
2 changed files with 17 additions and 2 deletions
@@ -5,10 +5,11 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirDelegatedConstructorCall : FirCall {
interface FirDelegatedConstructorCall : @VisitedSupertype FirCall, FirQualifiedAccess {
// Do we need 'constructedType: FirType' here?
val constructedTypeRef: FirTypeRef
@@ -22,6 +23,7 @@ interface FirDelegatedConstructorCall : FirCall {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
constructedTypeRef.accept(visitor, data)
super.acceptChildren(visitor, data)
calleeReference.accept(visitor, data)
super<FirCall>.acceptChildren(visitor, data)
}
}
@@ -7,8 +7,12 @@ package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirReference
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -19,8 +23,17 @@ class FirDelegatedConstructorCallImpl(
override var constructedTypeRef: FirTypeRef,
override val isThis: Boolean
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
override var calleeReference: FirReference =
if (isThis) FirExplicitThisReference(session, psi, null) else FirExplicitSuperReference(session, psi, constructedTypeRef)
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 {
constructedTypeRef = constructedTypeRef.transformSingle(transformer, data)
calleeReference = calleeReference.transformSingle(transformer, data)
return super<FirAbstractCall>.transformChildren(transformer, data)
}