From 31f2c4a85715f299cd12e4ebadcdd531b74eceb6 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 28 Aug 2020 15:21:42 +0300 Subject: [PATCH] FIR: add fake source element to implicit function return statement --- .../kotlin/fir/lightTree/converter/DeclarationsConverter.kt | 3 ++- .../src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 3 +-- .../src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 0cfec02bd6b..164dbc74ed6 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1361,8 +1361,9 @@ class DeclarationsConverter( baseSession, baseScopeProvider, stubMode, blockTree, offset = tree.getStartOffset(block), context ).convertBlockExpression(blockTree.root) } else { + val firExpression = buildExpressionStub() FirSingleExpressionBlock( - buildExpressionStub().toReturn() + firExpression.toReturn(baseSource = firExpression.source) ) } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index e16032654d9..5ed89a643d6 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -236,8 +236,7 @@ class RawFirBuilder( } else -> { val result = { bodyExpression }.toFirExpression("Function has no body (but should)") - // basePsi is null, because 'return' is synthetic & should not be bound to some PSI - FirSingleExpressionBlock(result.toReturn(baseSource = null)) to null + FirSingleExpressionBlock(result.toReturn(baseSource = result.source)) to null } } diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index cbfe0749da5..b81c32eb567 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -139,7 +139,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte ) } - source = baseSource + source = baseSource?.fakeElement(FirFakeSourceElementKind.ImplicitReturn) result = this@toReturn if (labelName == null) { target = context.firFunctionTargets.lastOrNull { !it.isLambda } ?: FirFunctionTarget(labelName, isLambda = false).apply {