From fa41e0f5a922cc55f8030b81efe99309fd4b587e Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Thu, 2 Dec 2021 23:42:28 +0300 Subject: [PATCH] [FIR2IR] Minor: reuse calculated expression --- .../lightTree/converter/ExpressionsConverter.kt | 10 +++++----- .../kotlin/fir/resolve/calls/VisibilityUtils.kt | 14 +++++--------- .../backend/jvm/lower/PropertyReferenceLowering.kt | 7 ++++--- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 5a6ea238210..0465badc82c 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -517,21 +517,21 @@ class ExpressionsConverter( var firSelector: FirExpression? = null var firReceiver: FirExpression? = null //before dot dotQualifiedExpression.forEachChildren { - when (it.tokenType) { + when (val tokenType = it.tokenType) { DOT -> isSelector = true SAFE_ACCESS -> { isSafe = true isSelector = true } else -> { - val isEffectiveSelector = isSelector && it.tokenType != TokenType.ERROR_ELEMENT + val isEffectiveSelector = isSelector && tokenType != TokenType.ERROR_ELEMENT val firExpression = getAsFirExpression(it, "Incorrect ${if (isEffectiveSelector) "selector" else "receiver"} expression") if (isEffectiveSelector) { - val callExpressionCallee = if (it.tokenType == CALL_EXPRESSION) it.getFirstChildExpressionUnwrapped() else null + val callExpressionCallee = if (tokenType == CALL_EXPRESSION) it.getFirstChildExpressionUnwrapped() else null firSelector = - if (it.tokenType is KtNameReferenceExpressionElementType || - (it.tokenType == CALL_EXPRESSION && callExpressionCallee?.tokenType != LAMBDA_EXPRESSION) + if (tokenType is KtNameReferenceExpressionElementType || + (tokenType == CALL_EXPRESSION && callExpressionCallee?.tokenType != LAMBDA_EXPRESSION) ) { firExpression } else { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt index ff4fb41e58d..d5758bb2605 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt @@ -69,14 +69,10 @@ private fun FirMemberDeclaration.getBackingFieldIfApplicable(): FirBackingField? // This check prevents resolving protected and // public fields. - val visibility = field.visibility - if ( - visibility == Visibilities.PrivateToThis || - visibility == Visibilities.Private || - visibility == Visibilities.Internal - ) { - return field + return when (field.visibility) { + Visibilities.PrivateToThis, + Visibilities.Private, + Visibilities.Internal -> field + else -> null } - - return null } diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt index 8a4385255b4..14c98264c4d 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt @@ -166,10 +166,11 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : IrEle private fun propertyReferenceKind(expression: IrCallableReference<*>, mutable: Boolean, i: Int): PropertyReferenceKind { check(i in 0..2) { "Incorrect number of receivers ($i) for property reference: ${expression.render()}" } + val symbols = context.ir.symbols return PropertyReferenceKind( - context.ir.symbols.getPropertyReferenceClass(mutable, i, false), - context.ir.symbols.getPropertyReferenceClass(mutable, i, true), - context.ir.symbols.reflection.owner.functions.single { + symbols.getPropertyReferenceClass(mutable, i, false), + symbols.getPropertyReferenceClass(mutable, i, true), + symbols.reflection.owner.functions.single { it.name.asString() == (if (mutable) "mutableProperty$i" else "property$i") } )