From bbc641b390bba967252eb2680e2362852323019a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 24 Sep 2020 23:11:47 +0300 Subject: [PATCH] FIR: do not get statement text for every statement in raw FIR builder PsiElement.getText This is rather expensive operation --- .../src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 b740533bc81..92cdfe7579d 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 @@ -201,6 +201,9 @@ class RawFirBuilder( private fun KtExpression.toFirStatement(errorReason: String): FirStatement = convertSafe() ?: buildErrorExpression(this.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) + private inline fun KtExpression.toFirStatement(errorReasonLazy: () -> String): FirStatement = + convertSafe() ?: buildErrorExpression(this.toFirSourceElement(), ConeSimpleDiagnostic(errorReasonLazy(), DiagnosticKind.Syntax)) + private fun KtExpression.toFirStatement(): FirStatement = convert() @@ -1419,7 +1422,7 @@ class RawFirBuilder( return FirBlockBuilder().apply { source = expression.toFirSourceElement() for (statement in expression.statements) { - val firStatement = statement.toFirStatement("Statement expected: ${statement.text}") + val firStatement = statement.toFirStatement { "Statement expected: ${statement.text}" } if (firStatement !is FirBlock || firStatement.annotations.isNotEmpty()) { statements += firStatement } else {