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 12a3073fb5a..62a8d5497fc 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 @@ -83,6 +83,7 @@ class ExpressionsConverter( FOR -> convertFor(expression) BREAK, CONTINUE -> convertLoopJump(expression) RETURN -> convertReturn(expression) + THROW -> convertThrow(expression) PARENTHESIZED, PROPERTY_DELEGATE, INDICES -> convertExpression(expression.getExpressionInParentheses()) THIS_EXPRESSION -> convertThisExpression(expression) SUPER_EXPRESSION -> convertSuperExpression(expression) @@ -804,6 +805,19 @@ class ExpressionsConverter( return result.toReturn(labelName) } + /** + * @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseThrow + * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThrowExpression + */ + private fun convertThrow(throwExpression: LighterASTNode): FirExpression { + var firExpression: FirExpression? = null + throwExpression.forEachChildren { + if (it.isExpression()) firExpression = getAsFirExpression(it) + } + + return FirThrowExpressionImpl(session, null, firExpression ?: FirErrorExpressionImpl(session, null, "Nothing to throw")) + } + /** * @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseThisExpression * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThisExpression diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt index f69bd9837ec..d48f0f032ef 100644 --- a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/TreesCompareTest.kt @@ -304,4 +304,21 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { visitQualifiedAccessExpression = true ) } + + fun testThrowExpression() { + compare( + stubMode = false, + visitAnonymousFunction = true, + visitLambdaExpression = true, + visitLocalMembers = true, + visitVariable = true, + visitAnnotation = true, + visitFunctionCall = true, + visitThrowExpression = true, + visitLoops = true, + visitConstExpression = true, + visitQualifiedAccessExpression = true, + visitAnonymousObject = true + ) + } }