FIR: add new qualified access implementation (FirThisReceiverExpression)

This commit is contained in:
Mikhail Glukhikh
2019-08-27 16:15:05 +03:00
parent c63919f224
commit 8633a33108
3 changed files with 33 additions and 7 deletions
@@ -896,10 +896,7 @@ class ExpressionsConverter(
*/
private fun convertThisExpression(thisExpression: LighterASTNode): FirQualifiedAccessExpression {
val label: String? = thisExpression.getLabelName()
return FirQualifiedAccessExpressionImpl(null).apply {
calleeReference = FirExplicitThisReference(null, label)
}
return FirThisReceiverExpressionImpl(null, FirExplicitThisReference(null, label))
}
/**
@@ -1182,9 +1182,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitThisExpression(expression: KtThisExpression, data: Unit): FirElement {
val labelName = expression.getLabelName()
return FirQualifiedAccessExpressionImpl(expression).apply {
calleeReference = FirExplicitThisReference(expression, labelName)
}
return FirThisReceiverExpressionImpl(expression, FirExplicitThisReference(expression, labelName))
}
override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement {
@@ -0,0 +1,31 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirThisReference
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirThisReceiverExpressionImpl(
psi: PsiElement?,
override var calleeReference: FirThisReference
) : FirModifiableQualifiedAccess<FirThisReference>, FirQualifiedAccessExpression(psi) {
override var explicitReceiver: FirExpression?
get() = null
set(_) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
calleeReference = calleeReference.transformSingle(transformer, data)
dispatchReceiver.transformSingle(transformer, data)
extensionReceiver.transformSingle(transformer, data)
return super<FirQualifiedAccessExpression>.transformChildren(transformer, data)
}
}