LL API: fix kt -> fir mapping for KtValueArgumentList
This commit is contained in:
committed by
teamcityserver
parent
f6a97cdec6
commit
c266d3e075
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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
|
||||
}
|
||||
|
||||
+3
@@ -15,4 +15,7 @@ class FirArraySetArgumentList internal constructor(
|
||||
) : FirAbstractArgumentList() {
|
||||
override val arguments: List<FirExpression>
|
||||
get() = indexes + rValue
|
||||
|
||||
override val source: FirSourceElement?
|
||||
get() = null
|
||||
}
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtValueArgumentList
|
||||
|
||||
public annotation class Annotation(val name: String)
|
||||
|
||||
@Annotation<expr>("y")</expr>
|
||||
fun x() {
|
||||
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KT element: KtValueArgumentList
|
||||
FIR element: FirResolvedArgumentList
|
||||
|
||||
FIR element rendered:
|
||||
String(y)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtValueArgumentList
|
||||
|
||||
fun callMe(x: Int, y: String) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
callMe<expr>(1, "2")</expr>
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KT element: KtValueArgumentList
|
||||
FIR element: FirResolvedArgumentList
|
||||
|
||||
FIR element rendered:
|
||||
Int(1)String(2)
|
||||
idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.kt
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtValueArgumentList
|
||||
|
||||
fun foo(f: (Int, String) -> Unit) {
|
||||
f<expr>(1, "2")</expr>
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KT element: KtValueArgumentList
|
||||
FIR element: FirResolvedArgumentList
|
||||
|
||||
FIR element rendered:
|
||||
Int(1)String(2)
|
||||
+28
@@ -39,6 +39,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest {
|
||||
runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotationApplicationArgumentList.kt")
|
||||
public void testAnnotationApplicationArgumentList() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgumentList.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotationApplicationCallExpression.kt")
|
||||
public void testAnnotationApplicationCallExpression() throws Exception {
|
||||
@@ -58,6 +64,28 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class Calls {
|
||||
@Test
|
||||
public void testAllFilesPresentInCalls() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("functionCallArgumentList.kt")
|
||||
public void testFunctionCallArgumentList() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/functionCallArgumentList.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("invokeCallArgumentList.kt")
|
||||
public void testInvokeCallArgumentList() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
|
||||
Reference in New Issue
Block a user