Handle unbound extension receiver in callable reference adaptation
This commit is contained in:
+5
@@ -1370,6 +1370,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
|
|||||||
KotlinTestUtils.runTestWithCustomIgnoreDirective(this::doTest, TargetBackend.ANY, testDataFilePath, "// IGNORE_BACKEND_FIR: ");
|
KotlinTestUtils.runTestWithCustomIgnoreDirective(this::doTest, TargetBackend.ANY, testDataFilePath, "// IGNORE_BACKEND_FIR: ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("adaptedExtensionFunctions.kt")
|
||||||
|
public void testAdaptedExtensionFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/adaptedExtensionFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
public void testAllFilesPresentInCallableReferences() throws Exception {
|
public void testAllFilesPresentInCallableReferences() throws Exception {
|
||||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/ir/irText/expressions/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/ir/irText/expressions/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-8
@@ -275,18 +275,24 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
throw AssertionError("Callable reference with adapted arguments expected: ${resolvedCall.call.callElement.text}")
|
throw AssertionError("Callable reference with adapted arguments expected: ${resolvedCall.call.callElement.text}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var shift = 0
|
||||||
if (resolvedCall.dispatchReceiver is TransientReceiver) {
|
if (resolvedCall.dispatchReceiver is TransientReceiver) {
|
||||||
// Unbound callable reference 'A::foo', receiver is passed as a first parameter
|
// Unbound callable reference 'A::foo', receiver is passed as a first parameter
|
||||||
val irAdaptedReceiverParameter = irAdapterFun.valueParameters[0]
|
val irAdaptedReceiverParameter = irAdapterFun.valueParameters[0]
|
||||||
irAdapteeCall.dispatchReceiver =
|
irAdapteeCall.dispatchReceiver =
|
||||||
IrGetValueImpl(startOffset, endOffset, irAdaptedReceiverParameter.type, irAdaptedReceiverParameter.symbol)
|
IrGetValueImpl(startOffset, endOffset, irAdaptedReceiverParameter.type, irAdaptedReceiverParameter.symbol)
|
||||||
|
} else if (resolvedCall.extensionReceiver is TransientReceiver) {
|
||||||
|
val irAdaptedReceiverParameter = irAdapterFun.valueParameters[0]
|
||||||
|
irAdapteeCall.extensionReceiver =
|
||||||
|
IrGetValueImpl(startOffset, endOffset, irAdaptedReceiverParameter.type, irAdaptedReceiverParameter.symbol)
|
||||||
|
shift = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
for ((valueParameter, valueArgument) in adaptedArguments) {
|
for ((valueParameter, valueArgument) in adaptedArguments) {
|
||||||
val substitutedValueParameter = resolvedCall.resultingDescriptor.valueParameters[valueParameter.index]
|
val substitutedValueParameter = resolvedCall.resultingDescriptor.valueParameters[valueParameter.index]
|
||||||
irAdapteeCall.putValueArgument(
|
irAdapteeCall.putValueArgument(
|
||||||
valueParameter.index,
|
valueParameter.index,
|
||||||
adaptResolvedValueArgument(startOffset, endOffset, valueArgument, irAdapterFun, substitutedValueParameter)
|
adaptResolvedValueArgument(startOffset, endOffset, valueArgument, irAdapterFun, substitutedValueParameter, shift)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,7 +302,8 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
resolvedValueArgument: ResolvedValueArgument,
|
resolvedValueArgument: ResolvedValueArgument,
|
||||||
irAdapterFun: IrSimpleFunction,
|
irAdapterFun: IrSimpleFunction,
|
||||||
valueParameter: ValueParameterDescriptor
|
valueParameter: ValueParameterDescriptor,
|
||||||
|
shift: Int
|
||||||
): IrExpression? {
|
): IrExpression? {
|
||||||
return when (resolvedValueArgument) {
|
return when (resolvedValueArgument) {
|
||||||
is DefaultValueArgument ->
|
is DefaultValueArgument ->
|
||||||
@@ -306,34 +313,35 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
valueParameter.type.toIrType(), valueParameter.varargElementType!!.toIrType(),
|
valueParameter.type.toIrType(), valueParameter.varargElementType!!.toIrType(),
|
||||||
resolvedValueArgument.arguments.map {
|
resolvedValueArgument.arguments.map {
|
||||||
adaptValueArgument(startOffset, endOffset, it, irAdapterFun)
|
adaptValueArgument(startOffset, endOffset, it, irAdapterFun, shift)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
is ExpressionValueArgument -> {
|
is ExpressionValueArgument -> {
|
||||||
val valueArgument = resolvedValueArgument.valueArgument!!
|
val valueArgument = resolvedValueArgument.valueArgument!!
|
||||||
|
|
||||||
adaptValueArgument(startOffset, endOffset, valueArgument, irAdapterFun) as IrExpression
|
adaptValueArgument(startOffset, endOffset, valueArgument, irAdapterFun, shift) as IrExpression
|
||||||
}
|
}
|
||||||
else ->
|
else ->
|
||||||
throw AssertionError("Unexpected ResolvedValueArgument: $resolvedValueArgument")
|
throw AssertionError("Unexpected ResolvedValueArgument: $resolvedValueArgument")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun adaptValueArgument(
|
private fun adaptValueArgument(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
valueArgument: ValueArgument,
|
valueArgument: ValueArgument,
|
||||||
irAdapterFun: IrSimpleFunction
|
irAdapterFun: IrSimpleFunction,
|
||||||
|
shift: Int
|
||||||
): IrVarargElement =
|
): IrVarargElement =
|
||||||
when (valueArgument) {
|
when (valueArgument) {
|
||||||
is FakeImplicitSpreadValueArgumentForCallableReference ->
|
is FakeImplicitSpreadValueArgumentForCallableReference ->
|
||||||
IrSpreadElementImpl(
|
IrSpreadElementImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
adaptValueArgument(startOffset, endOffset, valueArgument.expression, irAdapterFun) as IrExpression
|
adaptValueArgument(startOffset, endOffset, valueArgument.expression, irAdapterFun, shift) as IrExpression
|
||||||
)
|
)
|
||||||
|
|
||||||
is FakePositionalValueArgumentForCallableReference -> {
|
is FakePositionalValueArgumentForCallableReference -> {
|
||||||
val irAdapterParameter = irAdapterFun.valueParameters[valueArgument.index]
|
val irAdapterParameter = irAdapterFun.valueParameters[valueArgument.index + shift]
|
||||||
IrGetValueImpl(startOffset, endOffset, irAdapterParameter.type, irAdapterParameter.symbol)
|
IrGetValueImpl(startOffset, endOffset, irAdapterParameter.type, irAdapterParameter.symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-1
@@ -1,6 +1,5 @@
|
|||||||
// !LANGUAGE: +NewInference +FunctionReferenceWithDefaultValueAsOtherType
|
// !LANGUAGE: +NewInference +FunctionReferenceWithDefaultValueAsOtherType
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// IGNORE_BACKEND: JVM_IR, JS_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|||||||
Vendored
+55
@@ -0,0 +1,55 @@
|
|||||||
|
FILE fqName:<root> fileName:/adaptedExtensionFunctions.kt
|
||||||
|
FUN name:use visibility:public modality:FINAL <> (f:kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER name:f index:0 type:kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>
|
||||||
|
BLOCK_BODY
|
||||||
|
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]
|
||||||
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
|
||||||
|
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]'
|
||||||
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
||||||
|
overridden:
|
||||||
|
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
||||||
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
||||||
|
overridden:
|
||||||
|
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
||||||
|
overridden:
|
||||||
|
public open fun toString (): kotlin.String declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
FUN name:extensionVararg visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.Array<out kotlin.String>) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.Array<out kotlin.String> varargElementType:kotlin.String [vararg]
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:extensionDefault visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.String) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.String
|
||||||
|
EXPRESSION_BODY
|
||||||
|
CONST String type=kotlin.String value=""
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:extensionBoth visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.String, t:kotlin.Array<out kotlin.String>) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.String
|
||||||
|
EXPRESSION_BODY
|
||||||
|
CONST String type=kotlin.String value=""
|
||||||
|
VALUE_PARAMETER name:t index:2 type:kotlin.Array<out kotlin.String> varargElementType:kotlin.String [vararg]
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:testExtensionVararg visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
ERROR_CALL 'Unresolved reference: <Inapplicable(INAPPLICABLE): [/use]>#' type=IrErrorType
|
||||||
|
FUNCTION_REFERENCE 'public final fun extensionVararg (i: kotlin.Int, vararg s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.reflect.KFunction3<<root>.C, kotlin.Int, kotlin.Array<out kotlin.String>, kotlin.Unit> origin=null reflectionTarget=<same>
|
||||||
|
FUN name:testExtensionDefault visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun use (f: kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
f: FUNCTION_REFERENCE 'public final fun extensionDefault (i: kotlin.Int, s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null reflectionTarget=<same>
|
||||||
|
FUN name:testExtensionBoth visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
ERROR_CALL 'Unresolved reference: <Inapplicable(INAPPLICABLE): [/use]>#' type=IrErrorType
|
||||||
|
FUNCTION_REFERENCE 'public final fun extensionBoth (i: kotlin.Int, s: kotlin.String, vararg t: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.reflect.KFunction3<<root>.C, kotlin.Int, kotlin.Array<out kotlin.String>, kotlin.Unit> origin=null reflectionTarget=<same>
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
// !LANGUAGE: +NewInference +FunctionReferenceWithDefaultValueAsOtherType
|
||||||
|
|
||||||
|
fun use(f: C.(Int) -> Unit) {}
|
||||||
|
|
||||||
|
class C
|
||||||
|
|
||||||
|
fun C.extensionVararg(i: Int, vararg s: String) {}
|
||||||
|
|
||||||
|
fun C.extensionDefault(i: Int, s: String = "") {}
|
||||||
|
|
||||||
|
fun C.extensionBoth(i: Int, s: String = "", vararg t: String) {}
|
||||||
|
|
||||||
|
fun testExtensionVararg() {
|
||||||
|
use(C::extensionVararg)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testExtensionDefault() {
|
||||||
|
use(C::extensionDefault)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testExtensionBoth() {
|
||||||
|
use(C::extensionBoth)
|
||||||
|
}
|
||||||
+79
@@ -0,0 +1,79 @@
|
|||||||
|
FILE fqName:<root> fileName:/adaptedExtensionFunctions.kt
|
||||||
|
FUN name:use visibility:public modality:FINAL <> (f:@[ExtensionFunctionType] kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER name:f index:0 type:@[ExtensionFunctionType] kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>
|
||||||
|
BLOCK_BODY
|
||||||
|
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]
|
||||||
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
|
||||||
|
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]'
|
||||||
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
||||||
|
overridden:
|
||||||
|
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
||||||
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
||||||
|
overridden:
|
||||||
|
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
||||||
|
overridden:
|
||||||
|
public open fun toString (): kotlin.String declared in kotlin.Any
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
FUN name:extensionVararg visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.Array<out kotlin.String>) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.Array<out kotlin.String> varargElementType:kotlin.String [vararg]
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:extensionDefault visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.String) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.String
|
||||||
|
EXPRESSION_BODY
|
||||||
|
CONST String type=kotlin.String value=""
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:extensionBoth visibility:public modality:FINAL <> ($receiver:<root>.C, i:kotlin.Int, s:kotlin.String, t:kotlin.Array<out kotlin.String>) returnType:kotlin.Unit
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:<root>.C
|
||||||
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
|
VALUE_PARAMETER name:s index:1 type:kotlin.String
|
||||||
|
EXPRESSION_BODY
|
||||||
|
CONST String type=kotlin.String value=""
|
||||||
|
VALUE_PARAMETER name:t index:2 type:kotlin.Array<out kotlin.String> varargElementType:kotlin.String [vararg]
|
||||||
|
BLOCK_BODY
|
||||||
|
FUN name:testExtensionVararg visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun use (f: @[ExtensionFunctionType] kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
f: BLOCK type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null
|
||||||
|
FUN ADAPTER_FOR_CALLABLE_REFERENCE name:extensionVararg visibility:local modality:FINAL <> (p0:<root>.C, p1:kotlin.Int) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p0 index:0 type:<root>.C
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p1 index:1 type:kotlin.Int
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun extensionVararg (i: kotlin.Int, vararg s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
$receiver: GET_VAR 'p0: <root>.C declared in <root>.testExtensionVararg.extensionVararg' type=<root>.C origin=null
|
||||||
|
i: GET_VAR 'p1: kotlin.Int declared in <root>.testExtensionVararg.extensionVararg' type=kotlin.Int origin=null
|
||||||
|
FUNCTION_REFERENCE 'local final fun extensionVararg (p0: <root>.C, p1: kotlin.Int): kotlin.Unit declared in <root>.testExtensionVararg' type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null reflectionTarget=null
|
||||||
|
FUN name:testExtensionDefault visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun use (f: @[ExtensionFunctionType] kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
f: BLOCK type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null
|
||||||
|
FUN ADAPTER_FOR_CALLABLE_REFERENCE name:extensionDefault visibility:local modality:FINAL <> (p0:<root>.C, p1:kotlin.Int) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p0 index:0 type:<root>.C
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p1 index:1 type:kotlin.Int
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun extensionDefault (i: kotlin.Int, s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
$receiver: GET_VAR 'p0: <root>.C declared in <root>.testExtensionDefault.extensionDefault' type=<root>.C origin=null
|
||||||
|
i: GET_VAR 'p1: kotlin.Int declared in <root>.testExtensionDefault.extensionDefault' type=kotlin.Int origin=null
|
||||||
|
FUNCTION_REFERENCE 'local final fun extensionDefault (p0: <root>.C, p1: kotlin.Int): kotlin.Unit declared in <root>.testExtensionDefault' type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null reflectionTarget=null
|
||||||
|
FUN name:testExtensionBoth visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun use (f: @[ExtensionFunctionType] kotlin.Function2<<root>.C, kotlin.Int, kotlin.Unit>): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
f: BLOCK type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null
|
||||||
|
FUN ADAPTER_FOR_CALLABLE_REFERENCE name:extensionBoth visibility:local modality:FINAL <> (p0:<root>.C, p1:kotlin.Int) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p0 index:0 type:<root>.C
|
||||||
|
VALUE_PARAMETER ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE name:p1 index:1 type:kotlin.Int
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun extensionBoth (i: kotlin.Int, s: kotlin.String, vararg t: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
$receiver: GET_VAR 'p0: <root>.C declared in <root>.testExtensionBoth.extensionBoth' type=<root>.C origin=null
|
||||||
|
i: GET_VAR 'p1: kotlin.Int declared in <root>.testExtensionBoth.extensionBoth' type=kotlin.Int origin=null
|
||||||
|
FUNCTION_REFERENCE 'local final fun extensionBoth (p0: <root>.C, p1: kotlin.Int): kotlin.Unit declared in <root>.testExtensionBoth' type=kotlin.reflect.KFunction2<<root>.C, kotlin.Int, kotlin.Unit> origin=null reflectionTarget=null
|
||||||
+5
-5
@@ -14860,6 +14860,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
public static class SerializationRegressions extends AbstractLightAnalysisModeTest {
|
public static class SerializationRegressions extends AbstractLightAnalysisModeTest {
|
||||||
|
@TestMetadata("transitiveClash.kt")
|
||||||
|
public void ignoreTransitiveClash() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ir/serializationRegressions/transitiveClash.kt");
|
||||||
|
}
|
||||||
|
|
||||||
private void runTest(String testDataFilePath) throws Exception {
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||||
}
|
}
|
||||||
@@ -14883,11 +14888,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/ir/serializationRegressions/innerClassInEnumEntryClass.kt");
|
runTest("compiler/testData/codegen/box/ir/serializationRegressions/innerClassInEnumEntryClass.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("transitiveClash.kt")
|
|
||||||
public void testTransitiveClash() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/ir/serializationRegressions/transitiveClash.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("useImportedMember.kt")
|
@TestMetadata("useImportedMember.kt")
|
||||||
public void testUseImportedMember() throws Exception {
|
public void testUseImportedMember() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ir/serializationRegressions/useImportedMember.kt");
|
runTest("compiler/testData/codegen/box/ir/serializationRegressions/useImportedMember.kt");
|
||||||
|
|||||||
@@ -1369,6 +1369,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("adaptedExtensionFunctions.kt")
|
||||||
|
public void testAdaptedExtensionFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/ir/irText/expressions/callableReferences/adaptedExtensionFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
public void testAllFilesPresentInCallableReferences() throws Exception {
|
public void testAllFilesPresentInCallableReferences() throws Exception {
|
||||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/ir/irText/expressions/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/ir/irText/expressions/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user