[FIR] Define argument lists and their builders more accurately
This commit is contained in:
@@ -484,7 +484,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
rValue = value
|
rValue = value
|
||||||
this.operation = operation
|
this.operation = operation
|
||||||
indexes += firArrayAccess.arguments
|
indexes += firArrayAccess.arguments
|
||||||
argumentList = FirArraySetArgumentList(rValue, indexes)
|
argumentList = buildArraySetArgumentList(rValue, indexes)
|
||||||
}
|
}
|
||||||
val arrayExpression = this.getChildNodeByType(REFERENCE_EXPRESSION)
|
val arrayExpression = this.getChildNodeByType(REFERENCE_EXPRESSION)
|
||||||
if (arrayExpression != null) {
|
if (arrayExpression != null) {
|
||||||
|
|||||||
+1
-1
@@ -209,7 +209,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
subCandidate.argumentMapping?.let {
|
subCandidate.argumentMapping?.let {
|
||||||
result.replaceArgumentList(FirResolvedArgumentList(it))
|
result.replaceArgumentList(buildResolvedArgumentList(it))
|
||||||
}
|
}
|
||||||
result.transformExplicitReceiver(integerApproximator, null)
|
result.transformExplicitReceiver(integerApproximator, null)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
abstract class FirAbstractArgumentList : FirArgumentList() {
|
||||||
|
override val source: FirSourceElement?
|
||||||
|
get() = null
|
||||||
|
|
||||||
|
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirArgumentList {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
// DO NOTHING
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,12 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.expressions
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList
|
import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.expressions.impl.FirArraySetArgumentList
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
|
||||||
|
|
||||||
fun buildUnaryArgumentList(argument: FirExpression): FirArgumentList = buildArgumentList {
|
fun buildUnaryArgumentList(argument: FirExpression): FirArgumentList = buildArgumentList {
|
||||||
arguments += argument
|
arguments += argument
|
||||||
@@ -21,45 +19,13 @@ fun buildBinaryArgumentList(left: FirExpression, right: FirExpression): FirArgum
|
|||||||
arguments += right
|
arguments += right
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class FirAbstractArgumentList : FirArgumentList() {
|
fun buildArraySetArgumentList(rValue: FirExpression, indexes: List<FirExpression>): FirArgumentList =
|
||||||
override val source: FirSourceElement?
|
FirArraySetArgumentList(rValue, indexes)
|
||||||
get() = null
|
|
||||||
|
|
||||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirArgumentList {
|
fun buildResolvedArgumentList(mapping: Map<FirExpression, FirValueParameter>): FirArgumentList =
|
||||||
return this
|
FirResolvedArgumentList(mapping)
|
||||||
}
|
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
|
||||||
// DO NOTHING
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object FirEmptyArgumentList : FirAbstractArgumentList() {
|
object FirEmptyArgumentList : FirAbstractArgumentList() {
|
||||||
override val arguments: List<FirExpression>
|
override val arguments: List<FirExpression>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
class FirArraySetArgumentList(
|
|
||||||
private val rValue: FirExpression,
|
|
||||||
private val indexes: List<FirExpression>
|
|
||||||
) : FirAbstractArgumentList() {
|
|
||||||
override val arguments: List<FirExpression>
|
|
||||||
get() = indexes + rValue
|
|
||||||
}
|
|
||||||
|
|
||||||
class FirResolvedArgumentList(
|
|
||||||
val mapping: Map<FirExpression, FirValueParameter>
|
|
||||||
) : FirAbstractArgumentList() {
|
|
||||||
override val arguments: List<FirExpression>
|
|
||||||
get() = mapping.keys.toList()
|
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
|
||||||
for (argument in mapping.keys) {
|
|
||||||
argument.accept(visitor, data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.fir.expressions.FirAbstractArgumentList
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
|
||||||
|
class FirArraySetArgumentList internal constructor(
|
||||||
|
private val rValue: FirExpression,
|
||||||
|
private val indexes: List<FirExpression>
|
||||||
|
) : FirAbstractArgumentList() {
|
||||||
|
override val arguments: List<FirExpression>
|
||||||
|
get() = indexes + rValue
|
||||||
|
}
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAbstractArgumentList
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
class FirResolvedArgumentList internal constructor(
|
||||||
|
val mapping: Map<FirExpression, FirValueParameter>
|
||||||
|
) : FirAbstractArgumentList() {
|
||||||
|
override val arguments: List<FirExpression>
|
||||||
|
get() = mapping.keys.toList()
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
for (argument in mapping.keys) {
|
||||||
|
argument.accept(visitor, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user