diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 7df5771139b..4163880d2be 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -10726,6 +10726,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("typeParameterized.kt") public void testTypeParameterized() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index e5fa8107c21..22a0fe71b7d 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -10726,6 +10726,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("typeParameterized.kt") public void testTypeParameterized() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index a07634e3599..8f6ea8c659c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -10726,6 +10726,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("typeParameterized.kt") public void testTypeParameterized() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java index 49c1fa73086..a069fc4429e 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java @@ -865,6 +865,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/declarations/contextReceivers/thisWithCustomLabel.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("unaryOperators.kt") public void testUnaryOperators() throws Exception { diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.fir.kt new file mode 100644 index 00000000000..924e2bef55e --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.fir.kt @@ -0,0 +1,11 @@ +// !LANGUAGE: +ContextReceivers +// IGNORE_BACKEND_FIR: JVM_IR + +context(T) +fun useContext(block: (T) -> Unit) { } + +fun test() { + with(42) { + useContext { i: Int -> i.toDouble() } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt new file mode 100644 index 00000000000..d38cd0b0e68 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt @@ -0,0 +1,12 @@ +// !LANGUAGE: +ContextReceivers +// IGNORE_BACKEND_FIR: JVM_IR + +context(T) +fun useContext(block: (T) -> Unit) { } + +fun test() { + with(42) { + useContext { i: Int -> i.toDouble() } + } +} + diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.txt new file mode 100644 index 00000000000..d963b71dd23 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.txt @@ -0,0 +1,4 @@ +package + +public fun test(): kotlin.Unit +public fun useContext(/*0*/ block: (T) -> kotlin.Unit): kotlin.Unit diff --git a/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.ir.txt b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.ir.txt new file mode 100644 index 00000000000..6e8357fd931 --- /dev/null +++ b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.ir.txt @@ -0,0 +1,27 @@ +FILE fqName: fileName:/typeParameterAsContextReceiver.kt + FUN name:useContext visibility:public modality:FINAL (:T of .useContext, block:kotlin.Function1.useContext, kotlin.Unit>) returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + contextReceiverParametersCount: 1 + VALUE_PARAMETER name: index:0 type:T of .useContext + VALUE_PARAMETER name:block index:1 type:kotlin.Function1.useContext, kotlin.Unit> + BLOCK_BODY + FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit + BLOCK_BODY + CALL 'public final fun with (receiver: T of kotlin.StandardKt.with, block: @[ExtensionFunctionType] kotlin.Function1): R of kotlin.StandardKt.with [inline] declared in kotlin.StandardKt' type=kotlin.Unit origin=null + : kotlin.Int + : kotlin.Unit + receiver: CONST Int type=kotlin.Int value=42 + block: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:kotlin.Int) returnType:kotlin.Unit + $receiver: VALUE_PARAMETER name:$this$with type:kotlin.Int + BLOCK_BODY + CALL 'public final fun useContext (: T of .useContext, block: kotlin.Function1.useContext, kotlin.Unit>): kotlin.Unit declared in ' type=kotlin.Unit origin=null + : kotlin.Int + : GET_VAR '$this$with: kotlin.Int declared in .test.' type=kotlin.Int origin=null + block: FUN_EXPR type=kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (i:kotlin.Int) returnType:kotlin.Unit + VALUE_PARAMETER name:i index:0 type:kotlin.Int + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun toDouble (): kotlin.Double declared in kotlin.Int' type=kotlin.Double origin=null + $this: GET_VAR 'i: kotlin.Int declared in .test..' type=kotlin.Int origin=null diff --git a/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt new file mode 100644 index 00000000000..924e2bef55e --- /dev/null +++ b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt @@ -0,0 +1,11 @@ +// !LANGUAGE: +ContextReceivers +// IGNORE_BACKEND_FIR: JVM_IR + +context(T) +fun useContext(block: (T) -> Unit) { } + +fun test() { + with(42) { + useContext { i: Int -> i.toDouble() } + } +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt.txt b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt.txt new file mode 100644 index 00000000000..8d11cfa8d3f --- /dev/null +++ b/compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt.txt @@ -0,0 +1,12 @@ +fun useContext(: T, block: Function1) { +} + +fun test() { + with(receiver = 42, block = local fun Int.() { + useContext( = $this$with, block = local fun (i: Int) { + i.toDouble() /*~> Unit */ + } +) + } +) +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 3444e46f192..95d5035f23b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -10732,6 +10732,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("typeParameterized.kt") public void testTypeParameterized() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java index acef506060a..c2b84133ba0 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java @@ -865,6 +865,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/declarations/contextReceivers/thisWithCustomLabel.kt"); } + @Test + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @Test @TestMetadata("unaryOperators.kt") public void testUnaryOperators() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java index 884a5904b47..2814bc7a86c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java @@ -663,6 +663,11 @@ public class KlibTextTestCaseGenerated extends AbstractKlibTextTestCase { runTest("compiler/testData/ir/irText/declarations/contextReceivers/thisWithCustomLabel.kt"); } + @TestMetadata("typeParameterAsContextReceiver.kt") + public void testTypeParameterAsContextReceiver() throws Exception { + runTest("compiler/testData/ir/irText/declarations/contextReceivers/typeParameterAsContextReceiver.kt"); + } + @TestMetadata("compiler/testData/ir/irText/declarations/contextReceivers/fromKEEP") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)