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 525aef58f2e..06d333682a5 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 @@ -58,6 +58,7 @@ class ExpressionsConverter( in qualifiedAccessTokens -> convertQualifiedExpression(expression) CALL_EXPRESSION -> convertCallExpression(expression) ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression) + COLLECTION_LITERAL_EXPRESSION -> convertCollectionLiteralExpresion(expression) STRING_TEMPLATE -> convertStringTemplate(expression) is KtConstantExpressionElementType -> convertConstantExpression(expression) REFERENCE_EXPRESSION -> convertSimpleNameExpression(expression) @@ -441,6 +442,20 @@ class ExpressionsConverter( } } + /** + * @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseCollectionLiteralExpression + */ + private fun convertCollectionLiteralExpresion(expression: LighterASTNode): FirExpression { + val firExpressionList = mutableListOf() + expression.forEachChildren { + if (it.isExpression()) firExpressionList += getAsFirExpression(it) + } + + return FirArrayOfCallImpl(session, null).apply { + arguments += firExpressionList + } + } + /** * @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseAsCollectionLiteralExpression */ diff --git a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/FirPartialTransformer.kt b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/FirPartialTransformer.kt index 2af2da5aa6a..a30d487060d 100644 --- a/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/FirPartialTransformer.kt +++ b/compiler/fir/lightTree/tests/org/jetbrains/kotlin/fir/lightTree/compare/FirPartialTransformer.kt @@ -32,15 +32,12 @@ class FirPartialTransformer( private val visitReturnExpression: Boolean = false, private val visitThrowExpression: Boolean = false, private val visitForLoop: Boolean = false, - private val visitClassReferenceExpression: Boolean = false, private val visitConstExpression: Boolean = false, private val visitQualifiedAccessExpression: Boolean = false, private val visitCallableReferenceAccess: Boolean = false, private val visitTryExpression: Boolean = false, private val visitWhenExpression: Boolean = false, - private val visitNamedArgumentExpression: Boolean = false, private val visitLambdaArgumentExpression: Boolean = false, - private val visitSpreadArgumentExpression: Boolean = false, private val visitAnonymousObject: Boolean = false, private val visitDoWhileLoop: Boolean = false, private val visitWhileLoop: Boolean = false, @@ -177,17 +174,6 @@ class FirPartialTransformer( } } - override fun transformClassReferenceExpression( - classReferenceExpression: FirClassReferenceExpression, - data: Nothing? - ): CompositeTransformResult { - return if (visitClassReferenceExpression) { - (classReferenceExpression.transformChildren(this, data) as FirClassReferenceExpression).compose() - } else { - DummyFirStatement().compose() - } - } - override fun transformConstExpression( constExpression: FirConstExpression, data: Nothing? @@ -237,17 +223,6 @@ class FirPartialTransformer( } } - override fun transformNamedArgumentExpression( - namedArgumentExpression: FirNamedArgumentExpression, - data: Nothing? - ): CompositeTransformResult { - return if (visitNamedArgumentExpression) { - (namedArgumentExpression.transformChildren(this, data) as FirNamedArgumentExpression).compose() - } else { - DummyFirStatement().compose() - } - } - override fun transformLambdaArgumentExpression( lambdaArgumentExpression: FirLambdaArgumentExpression, data: Nothing? @@ -259,17 +234,6 @@ class FirPartialTransformer( } } - override fun transformSpreadArgumentExpression( - spreadArgumentExpression: FirSpreadArgumentExpression, - data: Nothing? - ): CompositeTransformResult { - return if (visitSpreadArgumentExpression) { - (spreadArgumentExpression.transformChildren(this, data) as FirSpreadArgumentExpression).compose() - } else { - DummyFirStatement().compose() - } - } - override fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: Nothing?): CompositeTransformResult { return if (visitAnonymousObject) { (anonymousObject.transformChildren(this, data) as FirAnonymousObject).compose() 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 b144d93dad2..7fdfe5043b8 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 @@ -72,15 +72,12 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { visitReturnExpression: Boolean = false, visitThrowExpression: Boolean = false, visitForLoop: Boolean = false, - visitClassReferenceExpression: Boolean = false, visitConstExpression: Boolean = false, visitQualifiedAccessExpression: Boolean = false, visitCallableReferenceAccess: Boolean = false, visitTryExpression: Boolean = false, visitWhenExpression: Boolean = false, - visitNamedArgumentExpression: Boolean = false, visitLambdaArgumentExpression: Boolean = false, - visitSpreadArgumentExpression: Boolean = false, visitAnonymousObject: Boolean = false, visitDoWhileLoop: Boolean = false, visitWhileLoop: Boolean = false, @@ -102,15 +99,12 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { visitReturnExpression = visitReturnExpression, visitThrowExpression = visitThrowExpression, visitForLoop = visitForLoop, - visitClassReferenceExpression = visitClassReferenceExpression, visitConstExpression = visitConstExpression, visitQualifiedAccessExpression = visitQualifiedAccessExpression, visitCallableReferenceAccess = visitCallableReferenceAccess, visitTryExpression = visitTryExpression, visitWhenExpression = visitWhenExpression, - visitNamedArgumentExpression = visitNamedArgumentExpression, visitLambdaArgumentExpression = visitLambdaArgumentExpression, - visitSpreadArgumentExpression = visitSpreadArgumentExpression, visitAnonymousObject = visitAnonymousObject, visitDoWhileLoop = visitDoWhileLoop, visitWhileLoop = visitWhileLoop, @@ -168,4 +162,15 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() { visitQualifiedAccessExpression = true ) } + + fun testArrayOfCall() { + compare( + stubMode = false, + visitTypeOperatorCall = true, + visitArrayOfCall = true, + visitFunctionCall = true, + visitConstExpression = true, + visitQualifiedAccessExpression = true + ) + } }