[FIR] Introduce FirResolvedArgumentList with argument-parameter mapping

#KT-36345 Fixed
This commit is contained in:
Mikhail Glukhikh
2020-03-11 13:46:09 +03:00
parent 6b0a3aa176
commit 3d17ce05b5
27 changed files with 49 additions and 37 deletions
@@ -7,6 +7,7 @@ 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.expressions.builder.buildArgumentList
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -48,4 +49,17 @@ class FirArraySetArgumentList(
) : 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)
}
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
@@ -38,6 +39,9 @@ inline val FirCall.arguments: List<FirExpression> get() = argumentList.arguments
inline val FirCall.argument: FirExpression get() = argumentList.arguments.first()
inline val FirCall.argumentMapping: Map<FirExpression, FirValueParameter>?
get() = (argumentList as? FirResolvedArgumentList)?.mapping
fun FirExpression.toResolvedCallableReference(): FirResolvedNamedReference? {
return (this as? FirQualifiedAccess)?.calleeReference as? FirResolvedNamedReference
}