Write arrayOf call parsing (light tree to FIR)
This commit is contained in:
committed by
Mikhail Glukhikh
parent
9d36855cb6
commit
e15b91ea16
+15
@@ -58,6 +58,7 @@ class ExpressionsConverter(
|
|||||||
in qualifiedAccessTokens -> convertQualifiedExpression(expression)
|
in qualifiedAccessTokens -> convertQualifiedExpression(expression)
|
||||||
CALL_EXPRESSION -> convertCallExpression(expression)
|
CALL_EXPRESSION -> convertCallExpression(expression)
|
||||||
ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression)
|
ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression)
|
||||||
|
COLLECTION_LITERAL_EXPRESSION -> convertCollectionLiteralExpresion(expression)
|
||||||
STRING_TEMPLATE -> convertStringTemplate(expression)
|
STRING_TEMPLATE -> convertStringTemplate(expression)
|
||||||
is KtConstantExpressionElementType -> convertConstantExpression(expression)
|
is KtConstantExpressionElementType -> convertConstantExpression(expression)
|
||||||
REFERENCE_EXPRESSION -> convertSimpleNameExpression(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<FirExpression>()
|
||||||
|
expression.forEachChildren {
|
||||||
|
if (it.isExpression()) firExpressionList += getAsFirExpression<FirExpression>(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
return FirArrayOfCallImpl(session, null).apply {
|
||||||
|
arguments += firExpressionList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseAsCollectionLiteralExpression
|
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseAsCollectionLiteralExpression
|
||||||
*/
|
*/
|
||||||
|
|||||||
-36
@@ -32,15 +32,12 @@ class FirPartialTransformer(
|
|||||||
private val visitReturnExpression: Boolean = false,
|
private val visitReturnExpression: Boolean = false,
|
||||||
private val visitThrowExpression: Boolean = false,
|
private val visitThrowExpression: Boolean = false,
|
||||||
private val visitForLoop: Boolean = false,
|
private val visitForLoop: Boolean = false,
|
||||||
private val visitClassReferenceExpression: Boolean = false,
|
|
||||||
private val visitConstExpression: Boolean = false,
|
private val visitConstExpression: Boolean = false,
|
||||||
private val visitQualifiedAccessExpression: Boolean = false,
|
private val visitQualifiedAccessExpression: Boolean = false,
|
||||||
private val visitCallableReferenceAccess: Boolean = false,
|
private val visitCallableReferenceAccess: Boolean = false,
|
||||||
private val visitTryExpression: Boolean = false,
|
private val visitTryExpression: Boolean = false,
|
||||||
private val visitWhenExpression: Boolean = false,
|
private val visitWhenExpression: Boolean = false,
|
||||||
private val visitNamedArgumentExpression: Boolean = false,
|
|
||||||
private val visitLambdaArgumentExpression: Boolean = false,
|
private val visitLambdaArgumentExpression: Boolean = false,
|
||||||
private val visitSpreadArgumentExpression: Boolean = false,
|
|
||||||
private val visitAnonymousObject: Boolean = false,
|
private val visitAnonymousObject: Boolean = false,
|
||||||
private val visitDoWhileLoop: Boolean = false,
|
private val visitDoWhileLoop: Boolean = false,
|
||||||
private val visitWhileLoop: Boolean = false,
|
private val visitWhileLoop: Boolean = false,
|
||||||
@@ -177,17 +174,6 @@ class FirPartialTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformClassReferenceExpression(
|
|
||||||
classReferenceExpression: FirClassReferenceExpression,
|
|
||||||
data: Nothing?
|
|
||||||
): CompositeTransformResult<FirStatement> {
|
|
||||||
return if (visitClassReferenceExpression) {
|
|
||||||
(classReferenceExpression.transformChildren(this, data) as FirClassReferenceExpression).compose()
|
|
||||||
} else {
|
|
||||||
DummyFirStatement().compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <T> transformConstExpression(
|
override fun <T> transformConstExpression(
|
||||||
constExpression: FirConstExpression<T>,
|
constExpression: FirConstExpression<T>,
|
||||||
data: Nothing?
|
data: Nothing?
|
||||||
@@ -237,17 +223,6 @@ class FirPartialTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformNamedArgumentExpression(
|
|
||||||
namedArgumentExpression: FirNamedArgumentExpression,
|
|
||||||
data: Nothing?
|
|
||||||
): CompositeTransformResult<FirStatement> {
|
|
||||||
return if (visitNamedArgumentExpression) {
|
|
||||||
(namedArgumentExpression.transformChildren(this, data) as FirNamedArgumentExpression).compose()
|
|
||||||
} else {
|
|
||||||
DummyFirStatement().compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformLambdaArgumentExpression(
|
override fun transformLambdaArgumentExpression(
|
||||||
lambdaArgumentExpression: FirLambdaArgumentExpression,
|
lambdaArgumentExpression: FirLambdaArgumentExpression,
|
||||||
data: Nothing?
|
data: Nothing?
|
||||||
@@ -259,17 +234,6 @@ class FirPartialTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformSpreadArgumentExpression(
|
|
||||||
spreadArgumentExpression: FirSpreadArgumentExpression,
|
|
||||||
data: Nothing?
|
|
||||||
): CompositeTransformResult<FirStatement> {
|
|
||||||
return if (visitSpreadArgumentExpression) {
|
|
||||||
(spreadArgumentExpression.transformChildren(this, data) as FirSpreadArgumentExpression).compose()
|
|
||||||
} else {
|
|
||||||
DummyFirStatement().compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: Nothing?): CompositeTransformResult<FirStatement> {
|
override fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: Nothing?): CompositeTransformResult<FirStatement> {
|
||||||
return if (visitAnonymousObject) {
|
return if (visitAnonymousObject) {
|
||||||
(anonymousObject.transformChildren(this, data) as FirAnonymousObject).compose()
|
(anonymousObject.transformChildren(this, data) as FirAnonymousObject).compose()
|
||||||
|
|||||||
+11
-6
@@ -72,15 +72,12 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
|
|||||||
visitReturnExpression: Boolean = false,
|
visitReturnExpression: Boolean = false,
|
||||||
visitThrowExpression: Boolean = false,
|
visitThrowExpression: Boolean = false,
|
||||||
visitForLoop: Boolean = false,
|
visitForLoop: Boolean = false,
|
||||||
visitClassReferenceExpression: Boolean = false,
|
|
||||||
visitConstExpression: Boolean = false,
|
visitConstExpression: Boolean = false,
|
||||||
visitQualifiedAccessExpression: Boolean = false,
|
visitQualifiedAccessExpression: Boolean = false,
|
||||||
visitCallableReferenceAccess: Boolean = false,
|
visitCallableReferenceAccess: Boolean = false,
|
||||||
visitTryExpression: Boolean = false,
|
visitTryExpression: Boolean = false,
|
||||||
visitWhenExpression: Boolean = false,
|
visitWhenExpression: Boolean = false,
|
||||||
visitNamedArgumentExpression: Boolean = false,
|
|
||||||
visitLambdaArgumentExpression: Boolean = false,
|
visitLambdaArgumentExpression: Boolean = false,
|
||||||
visitSpreadArgumentExpression: Boolean = false,
|
|
||||||
visitAnonymousObject: Boolean = false,
|
visitAnonymousObject: Boolean = false,
|
||||||
visitDoWhileLoop: Boolean = false,
|
visitDoWhileLoop: Boolean = false,
|
||||||
visitWhileLoop: Boolean = false,
|
visitWhileLoop: Boolean = false,
|
||||||
@@ -102,15 +99,12 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
|
|||||||
visitReturnExpression = visitReturnExpression,
|
visitReturnExpression = visitReturnExpression,
|
||||||
visitThrowExpression = visitThrowExpression,
|
visitThrowExpression = visitThrowExpression,
|
||||||
visitForLoop = visitForLoop,
|
visitForLoop = visitForLoop,
|
||||||
visitClassReferenceExpression = visitClassReferenceExpression,
|
|
||||||
visitConstExpression = visitConstExpression,
|
visitConstExpression = visitConstExpression,
|
||||||
visitQualifiedAccessExpression = visitQualifiedAccessExpression,
|
visitQualifiedAccessExpression = visitQualifiedAccessExpression,
|
||||||
visitCallableReferenceAccess = visitCallableReferenceAccess,
|
visitCallableReferenceAccess = visitCallableReferenceAccess,
|
||||||
visitTryExpression = visitTryExpression,
|
visitTryExpression = visitTryExpression,
|
||||||
visitWhenExpression = visitWhenExpression,
|
visitWhenExpression = visitWhenExpression,
|
||||||
visitNamedArgumentExpression = visitNamedArgumentExpression,
|
|
||||||
visitLambdaArgumentExpression = visitLambdaArgumentExpression,
|
visitLambdaArgumentExpression = visitLambdaArgumentExpression,
|
||||||
visitSpreadArgumentExpression = visitSpreadArgumentExpression,
|
|
||||||
visitAnonymousObject = visitAnonymousObject,
|
visitAnonymousObject = visitAnonymousObject,
|
||||||
visitDoWhileLoop = visitDoWhileLoop,
|
visitDoWhileLoop = visitDoWhileLoop,
|
||||||
visitWhileLoop = visitWhileLoop,
|
visitWhileLoop = visitWhileLoop,
|
||||||
@@ -168,4 +162,15 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
|
|||||||
visitQualifiedAccessExpression = true
|
visitQualifiedAccessExpression = true
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testArrayOfCall() {
|
||||||
|
compare(
|
||||||
|
stubMode = false,
|
||||||
|
visitTypeOperatorCall = true,
|
||||||
|
visitArrayOfCall = true,
|
||||||
|
visitFunctionCall = true,
|
||||||
|
visitConstExpression = true,
|
||||||
|
visitQualifiedAccessExpression = true
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user