LL API: fix kt -> fir mapping for KtValueArgumentList

This commit is contained in:
Ilya Kirillov
2021-07-12 15:56:43 +02:00
committed by teamcityserver
parent f6a97cdec6
commit c266d3e075
13 changed files with 82 additions and 9 deletions
@@ -610,6 +610,7 @@ open class RawFirBuilder(
private fun KtCallElement.extractArgumentsTo(container: FirCallBuilder) {
val argumentList = buildArgumentList {
source = valueArgumentList?.toFirSourceElement()
for (argument in valueArguments) {
val argumentExpression = argument.toFirExpression()
arguments += when (argument) {
@@ -196,7 +196,7 @@ class FirCallCompletionResultsWriterTransformer(
} else {
subCandidate.handleVarargs()
subCandidate.argumentMapping?.let {
val newArgumentList = buildResolvedArgumentList(it)
val newArgumentList = buildResolvedArgumentList(it, source = functionCall.argumentList.source)
val symbol = subCandidate.symbol
val functionIsInline =
(symbol as? FirNamedFunctionSymbol)?.fir?.isInline == true || symbol.isArrayConstructorWithLambda
@@ -273,7 +273,7 @@ class FirCallCompletionResultsWriterTransformer(
} else {
subCandidate.handleVarargs()
subCandidate.argumentMapping?.let {
annotationCall.replaceArgumentList(buildResolvedArgumentList(it))
annotationCall.replaceArgumentList(buildResolvedArgumentList(it, annotationCall.argumentList.source))
}
}
return annotationCall
@@ -452,7 +452,7 @@ class FirCallCompletionResultsWriterTransformer(
} else {
subCandidate.handleVarargs()
subCandidate.argumentMapping?.let {
delegatedConstructorCall.replaceArgumentList(buildResolvedArgumentList(it))
delegatedConstructorCall.replaceArgumentList(buildResolvedArgumentList(it, delegatedConstructorCall.argumentList.source))
}
}
return delegatedConstructorCall.transformCalleeReference(
@@ -11,9 +11,6 @@ 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
}
@@ -24,8 +24,11 @@ fun buildBinaryArgumentList(left: FirExpression, right: FirExpression): FirArgum
fun buildArraySetArgumentList(rValue: FirExpression, indexes: List<FirExpression>): FirArgumentList =
FirArraySetArgumentList(rValue, indexes)
fun buildResolvedArgumentList(mapping: LinkedHashMap<FirExpression, FirValueParameter>): FirResolvedArgumentList =
FirResolvedArgumentList(mapping)
fun buildResolvedArgumentList(
mapping: LinkedHashMap<FirExpression, FirValueParameter>,
source: FirSourceElement? = null
): FirResolvedArgumentList =
FirResolvedArgumentList(mapping, source)
fun buildPartiallyResolvedArgumentList(
original: FirArgumentList,
@@ -40,4 +43,7 @@ fun buildPartiallyResolvedArgumentList(
object FirEmptyArgumentList : FirAbstractArgumentList() {
override val arguments: List<FirExpression>
get() = emptyList()
override val source: FirSourceElement?
get() = null
}
@@ -15,4 +15,7 @@ class FirArraySetArgumentList internal constructor(
) : FirAbstractArgumentList() {
override val arguments: List<FirExpression>
get() = indexes + rValue
override val source: FirSourceElement?
get() = null
}
@@ -15,7 +15,8 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformSingle
class FirResolvedArgumentList internal constructor(
mapping: LinkedHashMap<FirExpression, FirValueParameter>
mapping: LinkedHashMap<FirExpression, FirValueParameter>,
override val source: FirSourceElement?
) : FirAbstractArgumentList() {
var mapping: LinkedHashMap<FirExpression, FirValueParameter> = mapping