FIR: introduce & resolve spread named arguments #KT-31575 Fixed
This commit is contained in:
@@ -627,9 +627,19 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) {
|
||||
print(namedArgumentExpression.name)
|
||||
print(" = ")
|
||||
if (namedArgumentExpression.isSpread) {
|
||||
print("*")
|
||||
}
|
||||
namedArgumentExpression.expression.accept(this)
|
||||
}
|
||||
|
||||
override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression) {
|
||||
if (spreadArgumentExpression.isSpread) {
|
||||
print("*")
|
||||
}
|
||||
spreadArgumentExpression.expression.accept(this)
|
||||
}
|
||||
|
||||
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) {
|
||||
print("<L> = ")
|
||||
lambdaArgumentExpression.expression.accept(this)
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirSpreadArgumentExpression : FirWrappedArgumentExpression {
|
||||
override val isSpread: Boolean
|
||||
get() = true
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitSpreadArgumentExpression(this, data)
|
||||
}
|
||||
+3
@@ -11,6 +11,9 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
interface FirWrappedArgumentExpression : FirExpression {
|
||||
val expression: FirExpression
|
||||
|
||||
val isSpread: Boolean
|
||||
get() = false
|
||||
|
||||
override val typeRef: FirTypeRef
|
||||
get() = expression.typeRef
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,6 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -20,6 +19,7 @@ class FirNamedArgumentExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val name: Name,
|
||||
override val isSpread: Boolean,
|
||||
override var expression: FirExpression
|
||||
) : FirNamedArgumentExpression, FirAbstractExpression(session, psi) {
|
||||
override var typeRef: FirTypeRef
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirSpreadArgumentExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var expression: FirExpression
|
||||
) : FirSpreadArgumentExpression, FirAbstractExpression(session, psi) {
|
||||
override var typeRef: FirTypeRef
|
||||
get() = super<FirSpreadArgumentExpression>.typeRef
|
||||
set(_) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expression = expression.transformSingle(transformer, data)
|
||||
return super<FirAbstractExpression>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+8
@@ -300,6 +300,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformWrappedArgumentExpression(namedArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformWrappedArgumentExpression(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformLoop(loop: FirLoop, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformStatement(loop, data)
|
||||
}
|
||||
@@ -680,6 +684,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformReturnExpression(returnExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformSpreadArgumentExpression(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitStarProjection(starProjection: FirStarProjection, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformStarProjection(starProjection, data)
|
||||
}
|
||||
|
||||
@@ -300,6 +300,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitWrappedArgumentExpression(namedArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): R {
|
||||
return visitWrappedArgumentExpression(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun visitLoop(loop: FirLoop, data: D): R {
|
||||
return visitStatement(loop, data)
|
||||
}
|
||||
|
||||
+8
@@ -300,6 +300,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitWrappedArgumentExpression(namedArgumentExpression, null)
|
||||
}
|
||||
|
||||
open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression) {
|
||||
visitWrappedArgumentExpression(spreadArgumentExpression, null)
|
||||
}
|
||||
|
||||
open fun visitLoop(loop: FirLoop) {
|
||||
visitStatement(loop, null)
|
||||
}
|
||||
@@ -680,6 +684,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitReturnExpression(returnExpression)
|
||||
}
|
||||
|
||||
final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: Nothing?) {
|
||||
visitSpreadArgumentExpression(spreadArgumentExpression)
|
||||
}
|
||||
|
||||
final override fun visitStarProjection(starProjection: FirStarProjection, data: Nothing?) {
|
||||
visitStarProjection(starProjection)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user