PSI2IR tests for KT-41735

This commit is contained in:
Dmitry Petrov
2020-09-08 12:34:06 +03:00
parent aa04c0b5df
commit 6746bd81d5
5 changed files with 71 additions and 0 deletions
@@ -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");
@@ -0,0 +1,21 @@
FILE fqName:<root> 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=<root>.A<*>
GET_VAR 'x: kotlin.Any declared in <root>.f' type=kotlin.Any origin=null
then: RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in <root>'
CALL 'public open fun call (block: <root>.A.I<T of <root>.A?>?): kotlin.String? declared in <root>.A' type=kotlin.String? origin=null
$this: TYPE_OP type=<root>.A<*> origin=IMPLICIT_CAST typeOperand=<root>.A<*>
GET_VAR 'x: kotlin.Any declared in <root>.f' type=kotlin.Any origin=null
block: TYPE_OP type=<root>.A.I<kotlin.Any?>? origin=SAM_CONVERSION typeOperand=<root>.A.I<kotlin.Any?>?
FUN_EXPR type=kotlin.Function1<kotlin.Any?, kotlin.String?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> 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 <anonymous> (y: kotlin.Any?): kotlin.String? declared in <root>.f'
CONST String type=kotlin.String value="OK"
RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in <root>'
CONST String type=kotlin.String value="Fail"
@@ -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<T> {
public interface I<S> {
String apply(S x);
}
public String call(I<T> block) { return block.apply(null); }
}
@@ -0,0 +1,23 @@
FILE fqName:<root> 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=<root>.A<*>
GET_VAR 'x: kotlin.Any declared in <root>.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 <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun call (block: @[FlexibleNullability] <root>.A.I<T of <root>.A?>?): @[FlexibleNullability] kotlin.String? declared in <root>.A' type=@[FlexibleNullability] kotlin.String? origin=null
$this: TYPE_OP type=<root>.A<T of <root>.A> origin=IMPLICIT_CAST typeOperand=<root>.A<T of <root>.A>
GET_VAR 'x: kotlin.Any declared in <root>.f' type=kotlin.Any origin=null
block: TYPE_OP type=@[FlexibleNullability] <root>.A.I<T of <root>.A?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] <root>.A.I<T of <root>.A?>?
FUN_EXPR type=kotlin.Function1<kotlin.Any?, @[FlexibleNullability] kotlin.String?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> 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 <anonymous> (y: kotlin.Any?): @[FlexibleNullability] kotlin.String? declared in <root>.f'
CONST String type=kotlin.String value="OK"
RETURN type=kotlin.Nothing from='public final fun f (x: kotlin.Any): kotlin.String declared in <root>'
CONST String type=kotlin.String value="Fail"
@@ -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");