From 858999c1a1a688966a2140a9adc02459025094f1 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 31 Mar 2022 17:54:25 +0300 Subject: [PATCH] [FIR] Preserve information about prefix/postfix-ness This information is needed for dynamics --- .../level/api/fir/file/structure/FirElementsRecorder.kt | 2 ++ .../src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt | 7 ++++++- .../src/org/jetbrains/kotlin/KtSourceElement.kt | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt index 3152de5f1e9..9027ffc0369 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt @@ -113,6 +113,8 @@ internal open class FirElementsRecorder : FirVisitor(val baseSession: FirSession, val context: Conte val resultInitializer = buildFunctionCall { source = desugaredSource calleeReference = buildSimpleNamedReference { - source = operationReference?.toFirSourceElement() + val kind = if (prefix) { + KtFakeSourceElementKind.DesugaredPrefixNameReference + } else { + KtFakeSourceElementKind.DesugaredPostfixNameReference + } + source = operationReference?.toFirSourceElement(kind) name = callName } explicitReceiver = if (prefix) { diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt index b3580609528..634e0e0fd54 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt @@ -110,6 +110,12 @@ sealed class KtFakeSourceElementKind : KtSourceElementKind() { // x = x++ -> x = { val = x; x = .inc(); } object DesugaredIncrementOrDecrement : KtFakeSourceElementKind() + // ++x --> `inc` calleeReference + object DesugaredPrefixNameReference : KtFakeSourceElementKind() + + // x++ --> `inc` calleeReference + object DesugaredPostfixNameReference : KtFakeSourceElementKind() + // x !in list --> !(x in list) where ! and !(x in list) will have a fake source object DesugaredInvertedContains : KtFakeSourceElementKind()