PSI2IR: Use substituted value parameter in function reference adaptation
This commit is contained in:
+5
@@ -1369,6 +1369,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
|
|||||||
runTest("compiler/testData/ir/irText/expressions/callableReferences/importedFromObject.kt");
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/importedFromObject.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("letArrayOf.kt")
|
||||||
|
public void testLetArrayOf() throws Exception {
|
||||||
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/letArrayOf.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("typeArguments.kt")
|
@TestMetadata("typeArguments.kt")
|
||||||
public void testTypeArguments() throws Exception {
|
public void testTypeArguments() throws Exception {
|
||||||
runTest("compiler/testData/ir/irText/expressions/callableReferences/typeArguments.kt");
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/typeArguments.kt");
|
||||||
|
|||||||
+2
-1
@@ -275,9 +275,10 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
}
|
}
|
||||||
|
|
||||||
for ((valueParameter, valueArgument) in adaptedArguments) {
|
for ((valueParameter, valueArgument) in adaptedArguments) {
|
||||||
|
val substitutedValueParameter = resolvedCall.resultingDescriptor.valueParameters[valueParameter.index]
|
||||||
irAdapteeCall.putValueArgument(
|
irAdapteeCall.putValueArgument(
|
||||||
valueParameter.index,
|
valueParameter.index,
|
||||||
adaptResolvedValueArgument(startOffset, endOffset, valueArgument, irAdapterFun, valueParameter)
|
adaptResolvedValueArgument(startOffset, endOffset, valueArgument, irAdapterFun, substitutedValueParameter)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
FILE fqName:<root> fileName:/letArrayOf.kt
|
||||||
|
FUN name:test visibility:public modality:FINAL <> () returnType:IrErrorType
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public final fun test (): IrErrorType declared in <root>'
|
||||||
|
ERROR_CALL 'Unresolved reference: <Inapplicable(INAPPLICABLE): [kotlin/let]>#' type=IrErrorType
|
||||||
|
FUNCTION_REFERENCE 'public final fun arrayOf <T> (elements: kotlin.Array<out T of kotlin.arrayOf>): kotlin.Array<T of kotlin.arrayOf> [inline] declared in kotlin' type=kotlin.reflect.KFunction1<kotlin.Array<out kotlin.Any?>, kotlin.Array<kotlin.Any?>> origin=null reflectionTarget=<same>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
// !LANGUAGE: +NewInference
|
||||||
|
|
||||||
|
fun test() = "OK".let(::arrayOf)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
FILE fqName:<root> fileName:/letArrayOf.kt
|
||||||
|
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Array<kotlin.String>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public final fun test (): kotlin.Array<kotlin.String> declared in <root>'
|
||||||
|
CALL 'public final fun let <T, R> (block: kotlin.Function1<T of kotlin.let, R of kotlin.let>): R of kotlin.let [inline] declared in kotlin' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
<T>: kotlin.String
|
||||||
|
<R>: kotlin.Array<kotlin.String>
|
||||||
|
$receiver: CONST String type=kotlin.String value="OK"
|
||||||
|
block: BLOCK type=kotlin.reflect.KFunction1<kotlin.String, kotlin.Array<kotlin.String>> origin=null
|
||||||
|
FUN ADAPTER_FOR_CALLABLE_REFERENCE name:arrayOf visibility:local modality:FINAL <> (p0:kotlin.String) returnType:kotlin.Array<kotlin.String> [inline]
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p0 index:0 type:kotlin.String
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='local final fun arrayOf (p0: kotlin.String): kotlin.Array<kotlin.String> [inline] declared in <root>.test'
|
||||||
|
CALL 'public final fun arrayOf <T> (vararg elements: T of kotlin.arrayOf): kotlin.Array<T of kotlin.arrayOf> [inline] declared in kotlin' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
<T>: kotlin.String
|
||||||
|
elements: VARARG type=kotlin.Array<out kotlin.String> varargElementType=kotlin.String
|
||||||
|
GET_VAR 'p0: kotlin.String declared in <root>.test.arrayOf' type=kotlin.String origin=null
|
||||||
|
FUNCTION_REFERENCE 'local final fun arrayOf (p0: kotlin.String): kotlin.Array<kotlin.String> [inline] declared in <root>.test' type=kotlin.reflect.KFunction1<kotlin.String, kotlin.Array<kotlin.String>> origin=null reflectionTarget=null
|
||||||
@@ -1368,6 +1368,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
runTest("compiler/testData/ir/irText/expressions/callableReferences/importedFromObject.kt");
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/importedFromObject.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("letArrayOf.kt")
|
||||||
|
public void testLetArrayOf() throws Exception {
|
||||||
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/letArrayOf.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("typeArguments.kt")
|
@TestMetadata("typeArguments.kt")
|
||||||
public void testTypeArguments() throws Exception {
|
public void testTypeArguments() throws Exception {
|
||||||
runTest("compiler/testData/ir/irText/expressions/callableReferences/typeArguments.kt");
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/typeArguments.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user