FIR: add fake source element to implicit function return statement

This commit is contained in:
Ilya Kirillov
2020-08-28 15:21:42 +03:00
parent 1ccf8bfb67
commit 31f2c4a857
3 changed files with 4 additions and 4 deletions
@@ -1361,8 +1361,9 @@ class DeclarationsConverter(
baseSession, baseScopeProvider, stubMode, blockTree, offset = tree.getStartOffset(block), context baseSession, baseScopeProvider, stubMode, blockTree, offset = tree.getStartOffset(block), context
).convertBlockExpression(blockTree.root) ).convertBlockExpression(blockTree.root)
} else { } else {
val firExpression = buildExpressionStub()
FirSingleExpressionBlock( FirSingleExpressionBlock(
buildExpressionStub().toReturn() firExpression.toReturn(baseSource = firExpression.source)
) )
} }
} }
@@ -236,8 +236,7 @@ class RawFirBuilder(
} }
else -> { else -> {
val result = { bodyExpression }.toFirExpression("Function has no body (but should)") 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 = result.source)) to null
FirSingleExpressionBlock(result.toReturn(baseSource = null)) to null
} }
} }
@@ -139,7 +139,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
) )
} }
source = baseSource source = baseSource?.fakeElement(FirFakeSourceElementKind.ImplicitReturn)
result = this@toReturn result = this@toReturn
if (labelName == null) { if (labelName == null) {
target = context.firFunctionTargets.lastOrNull { !it.isLambda } ?: FirFunctionTarget(labelName, isLambda = false).apply { target = context.firFunctionTargets.lastOrNull { !it.isLambda } ?: FirFunctionTarget(labelName, isLambda = false).apply {