[FIR] Unify FirResolvedArgumentList with FirPartiallyResolvedArgumentList
Effectively FirPartiallyResolvedArgumentList was resolved argument list for error calls, so not all arguments had proper value parameter. So FirPartiallyResolvedArgumentList now inherits FirResolvedArgumentList and renamed to FirResolvedArgumentListForErrorCall
This commit is contained in:
committed by
teamcityserver
parent
8904d6fde9
commit
728df8127c
+3
-3
@@ -205,7 +205,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
result.argumentList.transformArguments(this, expectedArgumentsTypeMapping)
|
||||
if (calleeReference.isError) {
|
||||
subCandidate.argumentMapping?.let {
|
||||
result.replaceArgumentList(buildPartiallyResolvedArgumentList(result.argumentList, it))
|
||||
result.replaceArgumentList(buildArgumentListForErrorCall(result.argumentList, it))
|
||||
}
|
||||
} else {
|
||||
subCandidate.handleVarargs()
|
||||
@@ -282,7 +282,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
}
|
||||
if (calleeReference.isError) {
|
||||
subCandidate.argumentMapping?.let {
|
||||
annotationCall.replaceArgumentList(buildPartiallyResolvedArgumentList(annotationCall.argumentList, it))
|
||||
annotationCall.replaceArgumentList(buildArgumentListForErrorCall(annotationCall.argumentList, it))
|
||||
}
|
||||
} else {
|
||||
subCandidate.handleVarargs()
|
||||
@@ -465,7 +465,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
delegatedConstructorCall.argumentList.transformArguments(this, argumentsMapping)
|
||||
if (calleeReference.isError) {
|
||||
subCandidate.argumentMapping?.let {
|
||||
delegatedConstructorCall.replaceArgumentList(buildPartiallyResolvedArgumentList(delegatedConstructorCall.argumentList, it))
|
||||
delegatedConstructorCall.replaceArgumentList(buildArgumentListForErrorCall(delegatedConstructorCall.argumentList, it))
|
||||
}
|
||||
} else {
|
||||
subCandidate.handleVarargs()
|
||||
|
||||
@@ -9,8 +9,9 @@ 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.expressions.impl.FirArraySetArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirPartiallyResolvedArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentListForErrorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentListImpl
|
||||
|
||||
fun buildUnaryArgumentList(argument: FirExpression): FirArgumentList = buildArgumentList {
|
||||
arguments += argument
|
||||
@@ -28,13 +29,13 @@ fun buildResolvedArgumentList(
|
||||
mapping: LinkedHashMap<FirExpression, FirValueParameter>,
|
||||
source: FirSourceElement? = null
|
||||
): FirResolvedArgumentList =
|
||||
FirResolvedArgumentList(mapping, source)
|
||||
FirResolvedArgumentListImpl(source, mapping)
|
||||
|
||||
fun buildPartiallyResolvedArgumentList(
|
||||
fun buildArgumentListForErrorCall(
|
||||
original: FirArgumentList,
|
||||
mapping: LinkedHashMap<FirExpression, FirValueParameter>
|
||||
mapping: Map<FirExpression, FirValueParameter?>
|
||||
): FirArgumentList {
|
||||
return FirPartiallyResolvedArgumentList(
|
||||
return FirResolvedArgumentListForErrorCall(
|
||||
original.source,
|
||||
original.arguments.map { key -> key to mapping[key] }.toMap(LinkedHashMap())
|
||||
)
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorLoop
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirBlockImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirPartiallyResolvedArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
@@ -53,7 +52,6 @@ inline val FirCall.resolvedArgumentMapping: Map<FirExpression, FirValueParameter
|
||||
inline val FirCall.argumentMapping: LinkedHashMap<FirExpression, FirValueParameter>?
|
||||
get() = when (val argumentList = argumentList) {
|
||||
is FirResolvedArgumentList -> argumentList.mapping
|
||||
is FirPartiallyResolvedArgumentList -> argumentList.mapping
|
||||
else -> null
|
||||
}
|
||||
|
||||
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
|
||||
class FirPartiallyResolvedArgumentList internal constructor(
|
||||
override var source: FirSourceElement?,
|
||||
private var _mapping: LinkedHashMap<FirExpression, FirValueParameter?>
|
||||
) : FirArgumentList() {
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val mapping: LinkedHashMap<FirExpression, FirValueParameter> =
|
||||
_mapping.filterValues { it != null } as LinkedHashMap<FirExpression, FirValueParameter>
|
||||
|
||||
|
||||
override val arguments: List<FirExpression>
|
||||
get() = _mapping.keys.toList()
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
_mapping.forEach { (k, _) -> k.accept(visitor, data) }
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPartiallyResolvedArgumentList {
|
||||
transformArguments(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirPartiallyResolvedArgumentList {
|
||||
_mapping = _mapping.mapKeys { (k, _) -> k.transformSingle(transformer, data) } as LinkedHashMap<FirExpression, FirValueParameter?>
|
||||
return this
|
||||
}
|
||||
}
|
||||
+45
-8
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
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.FirAbstractArgumentList
|
||||
@@ -14,25 +15,61 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
|
||||
class FirResolvedArgumentList internal constructor(
|
||||
mapping: LinkedHashMap<FirExpression, FirValueParameter>,
|
||||
override val source: FirSourceElement?
|
||||
) : FirAbstractArgumentList() {
|
||||
|
||||
var mapping: LinkedHashMap<FirExpression, FirValueParameter> = mapping
|
||||
private set
|
||||
abstract class FirResolvedArgumentList : FirAbstractArgumentList() {
|
||||
abstract override val source: FirSourceElement?
|
||||
abstract val mapping: LinkedHashMap<FirExpression, FirValueParameter>
|
||||
|
||||
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) {
|
||||
for (argument in arguments) {
|
||||
argument.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
|
||||
abstract override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirArgumentList
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
transformArguments(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal class FirResolvedArgumentListImpl(
|
||||
override val source: FirSourceElement?,
|
||||
mapping: LinkedHashMap<FirExpression, FirValueParameter>
|
||||
) : FirResolvedArgumentList() {
|
||||
|
||||
override var mapping: LinkedHashMap<FirExpression, FirValueParameter> = mapping
|
||||
private set
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirArgumentList {
|
||||
mapping = mapping.mapKeys { (k, _) -> k.transformSingle(transformer, data) } as LinkedHashMap<FirExpression, FirValueParameter>
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
internal class FirResolvedArgumentListForErrorCall(
|
||||
override var source: FirSourceElement?,
|
||||
private var _mapping: LinkedHashMap<FirExpression, FirValueParameter?>
|
||||
) : FirResolvedArgumentList() {
|
||||
|
||||
override var mapping: LinkedHashMap<FirExpression, FirValueParameter> = computeMapping()
|
||||
private set
|
||||
|
||||
private fun computeMapping(): LinkedHashMap<FirExpression, FirValueParameter> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return _mapping.filterValues { it != null } as LinkedHashMap<FirExpression, FirValueParameter>
|
||||
}
|
||||
|
||||
override val arguments: List<FirExpression>
|
||||
get() = _mapping.keys.toList()
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirResolvedArgumentListForErrorCall {
|
||||
_mapping = _mapping.mapKeys { (k, _) -> k.transformSingle(transformer, data) } as LinkedHashMap<FirExpression, FirValueParameter?>
|
||||
mapping = computeMapping()
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user