From 8633a33108a1b0a35880cf1b51005c62e9f49a49 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 27 Aug 2019 16:15:05 +0300 Subject: [PATCH] FIR: add new qualified access implementation (FirThisReceiverExpression) --- .../converter/ExpressionsConverter.kt | 5 +-- .../kotlin/fir/builder/RawFirBuilder.kt | 4 +-- .../impl/FirThisReceiverExpressionImpl.kt | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 9763ae4efae..a965952edbc 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -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)) } /** diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index b471479a259..ab09a67145c 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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 { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt new file mode 100644 index 00000000000..bbba0429cfc --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt @@ -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, FirQualifiedAccessExpression(psi) { + override var explicitReceiver: FirExpression? + get() = null + set(_) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + calleeReference = calleeReference.transformSingle(transformer, data) + dispatchReceiver.transformSingle(transformer, data) + extensionReceiver.transformSingle(transformer, data) + + return super.transformChildren(transformer, data) + } +} \ No newline at end of file