diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java index e6cd98d0722..1f27dbea070 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java @@ -1658,6 +1658,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.kt"); } + @TestMetadata("genericSamSmartcast.kt") + public void testGenericSamSmartcast() throws Exception { + runTest("compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.kt"); + } + @TestMetadata("samByProjectedType.kt") public void testSamByProjectedType() throws Exception { runTest("compiler/testData/ir/irText/expressions/sam/samByProjectedType.kt"); diff --git a/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.fir.txt b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.fir.txt new file mode 100644 index 00000000000..d25cef9cccb --- /dev/null +++ b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.fir.txt @@ -0,0 +1,21 @@ +FILE fqName: fileName:/genericSamSmartcast.kt + FUN name:f visibility:public modality:FINAL <> (x:kotlin.Any) returnType:kotlin.String + VALUE_PARAMETER name:x index:0 type:kotlin.Any + BLOCK_BODY + WHEN type=kotlin.Unit origin=IF + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.A<*> + GET_VAR 'x: kotlin.Any declared in .f' type=kotlin.Any origin=null + then: RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in ' + CALL 'public open fun call (block: .A.I.A?>?): kotlin.String? declared in .A' type=kotlin.String? origin=null + $this: TYPE_OP type=.A<*> origin=IMPLICIT_CAST typeOperand=.A<*> + GET_VAR 'x: kotlin.Any declared in .f' type=kotlin.Any origin=null + block: TYPE_OP type=.A.I? origin=SAM_CONVERSION typeOperand=.A.I? + FUN_EXPR type=kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (y:kotlin.Any?) returnType:kotlin.String? + VALUE_PARAMETER name:y index:0 type:kotlin.Any? + BLOCK_BODY + RETURN type=kotlin.Nothing from='local final fun (y: kotlin.Any?): kotlin.String? declared in .f' + CONST String type=kotlin.String value="OK" + RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail" diff --git a/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.kt b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.kt new file mode 100644 index 00000000000..68c7b658898 --- /dev/null +++ b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.kt @@ -0,0 +1,17 @@ +// FILE: genericSamSmartcast.kt +fun f(x: Any): String { + if (x is A<*>) { + return x.call { y: Any? -> "OK" } + } + return "Fail" +} + +// FILE: A.java +public class A { + public interface I { + String apply(S x); + } + + public String call(I block) { return block.apply(null); } +} + diff --git a/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt new file mode 100644 index 00000000000..3285497c885 --- /dev/null +++ b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt @@ -0,0 +1,23 @@ +FILE fqName: fileName:/genericSamSmartcast.kt + FUN name:f visibility:public modality:FINAL <> (x:kotlin.Any) returnType:kotlin.String + VALUE_PARAMETER name:x index:0 type:kotlin.Any + BLOCK_BODY + WHEN type=kotlin.Unit origin=IF + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.A<*> + GET_VAR 'x: kotlin.Any declared in .f' type=kotlin.Any origin=null + then: BLOCK type=kotlin.Unit origin=null + RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in ' + TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String + CALL 'public open fun call (block: @[FlexibleNullability] .A.I.A?>?): @[FlexibleNullability] kotlin.String? declared in .A' type=@[FlexibleNullability] kotlin.String? origin=null + $this: TYPE_OP type=.A.A> origin=IMPLICIT_CAST typeOperand=.A.A> + GET_VAR 'x: kotlin.Any declared in .f' type=kotlin.Any origin=null + block: TYPE_OP type=@[FlexibleNullability] .A.I.A?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .A.I.A?>? + FUN_EXPR type=kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (y:kotlin.Any?) returnType:@[FlexibleNullability] kotlin.String? + VALUE_PARAMETER name:y index:0 type:kotlin.Any? + BLOCK_BODY + RETURN type=kotlin.Nothing from='local final fun (y: kotlin.Any?): @[FlexibleNullability] kotlin.String? declared in .f' + CONST String type=kotlin.String value="OK" + RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail" diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java index d32a8a9d013..1327dad853e 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java @@ -1657,6 +1657,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase { runTest("compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.kt"); } + @TestMetadata("genericSamSmartcast.kt") + public void testGenericSamSmartcast() throws Exception { + runTest("compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.kt"); + } + @TestMetadata("samByProjectedType.kt") public void testSamByProjectedType() throws Exception { runTest("compiler/testData/ir/irText/expressions/sam/samByProjectedType.kt");