From 4424512bd6dcfac368749cc33060aaba9717f0f0 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Tue, 26 Oct 2021 13:37:33 +0300 Subject: [PATCH] [TEST] Add irText test for `DefinitelyNotNull` type --- .../runners/ir/Fir2IrTextTestGenerated.java | 48 ++++ .../ir/irText/types/definitelyNonNull.ir.txt | 45 ++++ .../ir/irText/types/definitelyNonNull.kt | 12 + .../ir/irText/types/definitelyNonNull.kt.txt | 17 ++ .../types/definitelyNonNullOverride.ir.txt | 83 +++++++ .../irText/types/definitelyNonNullOverride.kt | 33 +++ .../irText/types/definitelyNonNullSAM.ir.txt | 223 ++++++++++++++++++ .../ir/irText/types/definitelyNonNullSAM.kt | 33 +++ .../types/definitelyNonNullWithJava.ir.txt | 27 +++ .../irText/types/definitelyNonNullWithJava.kt | 19 ++ .../types/definitelyNonNullWithJava.kt.txt | 5 + .../types/definitelyNotNullAsArgument.ir.txt | 95 ++++++++ .../types/definitelyNotNullAsArgument.kt | 21 ++ .../types/definitelyNotNullAsArgument.kt.txt | 38 +++ .../types/definitelyNotNullAsReceiver.ir.txt | 23 ++ .../types/definitelyNotNullAsReceiver.kt | 10 + .../types/definitelyNotNullAsReceiver.kt.txt | 13 + .../definitelyNotNullWithIntersection1.ir.txt | 80 +++++++ .../definitelyNotNullWithIntersection1.kt | 20 ++ .../types/typeCheckOnDefinitelyNotNull.ir.txt | 30 +++ .../types/typeCheckOnDefinitelyNotNull.kt | 8 + .../types/typeCheckOnDefinitelyNotNull.kt.txt | 15 ++ .../test/runners/ir/IrTextTestGenerated.java | 48 ++++ .../kotlin/ir/KlibTextTestCaseGenerated.java | 35 +++ 24 files changed, 981 insertions(+) create mode 100644 compiler/testData/ir/irText/types/definitelyNonNull.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNull.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNull.kt.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullOverride.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullOverride.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullSAM.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullSAM.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullWithJava.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsArgument.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.ir.txt create mode 100644 compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt create mode 100644 compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.ir.txt create mode 100644 compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt create mode 100644 compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt.txt 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 ae88d361776..7ae24515fde 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 @@ -2704,6 +2704,48 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/types/coercionToUnitInLambdaReturnValue.kt"); } + @Test + @TestMetadata("definitelyNonNull.kt") + public void testDefinitelyNonNull() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNull.kt"); + } + + @Test + @TestMetadata("definitelyNonNullOverride.kt") + public void testDefinitelyNonNullOverride() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullOverride.kt"); + } + + @Test + @TestMetadata("definitelyNonNullSAM.kt") + public void testDefinitelyNonNullSAM() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullSAM.kt"); + } + + @Test + @TestMetadata("definitelyNonNullWithJava.kt") + public void testDefinitelyNonNullWithJava() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt"); + } + + @Test + @TestMetadata("definitelyNotNullAsArgument.kt") + public void testDefinitelyNotNullAsArgument() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt"); + } + + @Test + @TestMetadata("definitelyNotNullAsReceiver.kt") + public void testDefinitelyNotNullAsReceiver() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt"); + } + + @Test + @TestMetadata("definitelyNotNullWithIntersection1.kt") + public void testDefinitelyNotNullWithIntersection1() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt"); + } + @Test @TestMetadata("genericDelegatedDeepProperty.kt") public void testGenericDelegatedDeepProperty() throws Exception { @@ -2830,6 +2872,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/types/typeAliasWithUnsafeVariance.kt"); } + @Test + @TestMetadata("typeCheckOnDefinitelyNotNull.kt") + public void testTypeCheckOnDefinitelyNotNull() throws Exception { + runTest("compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt"); + } + @Nested @TestMetadata("compiler/testData/ir/irText/types/nullChecks") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/testData/ir/irText/types/definitelyNonNull.ir.txt b/compiler/testData/ir/irText/types/definitelyNonNull.ir.txt new file mode 100644 index 00000000000..b7ecf07b840 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNull.ir.txt @@ -0,0 +1,45 @@ +FILE fqName: fileName:/definitelyNonNull.kt + FUN name:elvisLike visibility:public modality:FINAL (x:T of .elvisLike, y:{T of .elvisLike & Any}) returnType:{T of .elvisLike & Any} + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:x index:0 type:T of .elvisLike + VALUE_PARAMETER name:y index:1 type:{T of .elvisLike & Any} + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun elvisLike (x: T of .elvisLike, y: {T of .elvisLike & Any}): {T of .elvisLike & Any} declared in ' + BLOCK type={T of .elvisLike & Any} origin=ELVIS + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:T of .elvisLike [val] + GET_VAR 'x: T of .elvisLike declared in .elvisLike' type=T of .elvisLike origin=null + WHEN type={T of .elvisLike & Any} origin=null + BRANCH + if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ + arg0: GET_VAR 'val tmp_0: T of .elvisLike [val] declared in .elvisLike' type=T of .elvisLike origin=null + arg1: CONST Null type=kotlin.Nothing? value=null + then: GET_VAR 'y: {T of .elvisLike & Any} declared in .elvisLike' type={T of .elvisLike & Any} origin=null + BRANCH + if: CONST Boolean type=kotlin.Boolean value=true + then: GET_VAR 'val tmp_0: T of .elvisLike [val] declared in .elvisLike' type=T of .elvisLike origin=null + FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY + $this: CALL 'public final fun elvisLike (x: T of .elvisLike, y: {T of .elvisLike & Any}): {T of .elvisLike & Any} declared in ' type=kotlin.String origin=null + : kotlin.String + x: CONST String type=kotlin.String value="" + y: CONST String type=kotlin.String value="" + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY + $this: CALL 'public final fun elvisLike (x: T of .elvisLike, y: {T of .elvisLike & Any}): {T of .elvisLike & Any} declared in ' type=kotlin.String origin=null + : kotlin.String? + x: CONST Null type=kotlin.Nothing? value=null + y: CONST String type=kotlin.String value="" + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY + $this: CALL 'public final fun elvisLike (x: T of .elvisLike, y: {T of .elvisLike & Any}): {T of .elvisLike & Any} declared in ' type=kotlin.String origin=null + : kotlin.String + x: CONST String type=kotlin.String value="" + y: CONST String type=kotlin.String value="" + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY + $this: CALL 'public final fun elvisLike (x: T of .elvisLike, y: {T of .elvisLike & Any}): {T of .elvisLike & Any} declared in ' type=kotlin.String origin=null + : kotlin.String? + x: CONST Null type=kotlin.Nothing? value=null + y: CONST String type=kotlin.String value="" diff --git a/compiler/testData/ir/irText/types/definitelyNonNull.kt b/compiler/testData/ir/irText/types/definitelyNonNull.kt new file mode 100644 index 00000000000..7ea07624c76 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNull.kt @@ -0,0 +1,12 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY + +fun elvisLike(x: T, y: T & Any): T & Any = x ?: y + +fun main() { + elvisLike("", "").length // OK + elvisLike(null, "").length // OK + + elvisLike("", "").length // OK + elvisLike(null, "").length // OK +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNonNull.kt.txt b/compiler/testData/ir/irText/types/definitelyNonNull.kt.txt new file mode 100644 index 00000000000..3703830062f --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNull.kt.txt @@ -0,0 +1,17 @@ +fun elvisLike(x: T, y: (T & Any)): (T & Any) { + return { // BLOCK + val tmp0_elvis_lhs: T = x + when { + EQEQ(arg0 = tmp0_elvis_lhs, arg1 = null) -> y + else -> tmp0_elvis_lhs + } + } +} + +fun main() { + elvisLike(x = "", y = "").() /*~> Unit */ + elvisLike(x = null, y = "").() /*~> Unit */ + elvisLike(x = "", y = "").() /*~> Unit */ + elvisLike(x = null, y = "").() /*~> Unit */ +} + diff --git a/compiler/testData/ir/irText/types/definitelyNonNullOverride.ir.txt b/compiler/testData/ir/irText/types/definitelyNonNullOverride.ir.txt new file mode 100644 index 00000000000..f8183044000 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullOverride.ir.txt @@ -0,0 +1,83 @@ +FILE fqName: fileName:/definitelyNonNullOverride.kt + CLASS CLASS name:B modality:OPEN visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.B.B> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.B.B> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:OPEN visibility:public superTypes:[kotlin.Any]' + FUN name:foo visibility:public modality:OPEN <> ($this:.B.B>, t:T of .B) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:t index:0 type:T of .B + BLOCK_BODY + FUN name:bar visibility:public modality:OPEN <> ($this:.B.B>, t:T of .B) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:t index:0 type:T of .B + BLOCK_BODY + FUN name:qux visibility:public modality:OPEN <> ($this:.B.B>, b:.B.B>) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:b index:0 type:.B.B> + BLOCK_BODY + FUN name:six visibility:public modality:OPEN ($this:.B.B>, t:T of .B, q:F of .B.six) returnType:kotlin.Unit + TYPE_PARAMETER name:F index:0 variance: superTypes:[kotlin.Any?] + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:t index:0 type:T of .B + VALUE_PARAMETER name:q index:1 type:F of .B.six + BLOCK_BODY + 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: 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: 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: type:kotlin.Any + CLASS CLASS name:D modality:FINAL visibility:public superTypes:[.B<{T of .D & Any}>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.D.D> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.D.D> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .B' + : {T of .D & Any} + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:D modality:FINAL visibility:public superTypes:[.B<{T of .D & Any}>]' + FUN name:foo visibility:public modality:OPEN <> ($this:.D.D>, t:{T of .D & Any}) returnType:kotlin.Unit + overridden: + public open fun foo (t: T of .B): kotlin.Unit declared in .B + $this: VALUE_PARAMETER name: type:.D.D> + VALUE_PARAMETER name:t index:0 type:{T of .D & Any} + BLOCK_BODY + FUN FAKE_OVERRIDE name:bar visibility:public modality:OPEN <> ($this:.B<{T of .D & Any}>, t:{T of .D & Any}) returnType:kotlin.Unit [fake_override] + overridden: + public open fun bar (t: T of .B): kotlin.Unit declared in .B + $this: VALUE_PARAMETER name: type:.B<{T of .D & Any}> + VALUE_PARAMETER name:t index:0 type:{T of .D & Any} + FUN FAKE_OVERRIDE name:qux visibility:public modality:OPEN <> ($this:.B<{T of .D & Any}>, b:.B<{T of .D & Any}>) returnType:kotlin.Unit [fake_override] + overridden: + public open fun qux (b: .B.B>): kotlin.Unit declared in .B + $this: VALUE_PARAMETER name: type:.B<{T of .D & Any}> + VALUE_PARAMETER name:b index:0 type:.B<{T of .D & Any}> + FUN FAKE_OVERRIDE name:six visibility:public modality:OPEN ($this:.B<{T of .D & Any}>, t:{T of .D & Any}, q:F of .D.six) returnType:kotlin.Unit [fake_override] + overridden: + public open fun six (t: T of .B, q: F of .B.six): kotlin.Unit declared in .B + TYPE_PARAMETER name:F index:0 variance: superTypes:[kotlin.Any?] + $this: VALUE_PARAMETER name: type:.B<{T of .D & Any}> + VALUE_PARAMETER name:t index:0 type:{T of .D & Any} + VALUE_PARAMETER name:q index:1 type:F of .D.six + 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 [fake_override,operator] declared in .B + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .B + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .B + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/types/definitelyNonNullOverride.kt b/compiler/testData/ir/irText/types/definitelyNonNullOverride.kt new file mode 100644 index 00000000000..d7c4e29b092 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullOverride.kt @@ -0,0 +1,33 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY +// SKIP_KT_DUMP + +open class B { + open fun foo(t: T) {} + open fun bar(t: T) {} + open fun qux(b: B) {} + open fun six(t: T, q: F) {} +} + +class D : B() { + override fun foo(t: T & Any) {} +} + + +// KT-49420 +//interface I1 { +// fun foo(t: T) +// fun bar(t: T) +//} +// +//interface I2 { +// fun foo(t: T) +// fun bar(t: T) +//} +// +// +//interface II : I1, I2 { +// override fun foo(t: T & Any) +//} +// +//abstract class Q : II \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNonNullSAM.ir.txt b/compiler/testData/ir/irText/types/definitelyNonNullSAM.ir.txt new file mode 100644 index 00000000000..2618ea8933f --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullSAM.ir.txt @@ -0,0 +1,223 @@ +FILE fqName: fileName:/definitelyNonNullSAM.kt + CLASS INTERFACE name:FIn modality:ABSTRACT visibility:public [fun] superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.FIn.FIn> + TYPE_PARAMETER name:T index:0 variance:in superTypes:[kotlin.Any?] + FUN name:f visibility:public modality:ABSTRACT <> ($this:.FIn.FIn>, x:T of .FIn) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.FIn.FIn> + VALUE_PARAMETER name:x index:0 type:T of .FIn + 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: 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: 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: type:kotlin.Any + CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Test.Test> + TYPE_PARAMETER name:S index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.Test.Test> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[kotlin.Any]' + FUN name:foo visibility:public modality:FINAL <> ($this:.Test.Test>) returnType:.FIn<{S of .Test & Any}> + $this: VALUE_PARAMETER name: type:.Test.Test> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (): .FIn<{S of .Test & Any}> declared in .Test' + TYPE_OP type=.FIn<{S of .Test & Any}> origin=SAM_CONVERSION typeOperand=.FIn<{S of .Test & Any}> + FUN_EXPR type=kotlin.Function1<@[ParameterName(name = 'x')] {@[ParameterName(name = 'x')] S of .Test & Any}, kotlin.Unit> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (sx:{S of .Test & Any}) returnType:kotlin.Unit + VALUE_PARAMETER name:sx index:0 type:{S of .Test & Any} + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun toString (): kotlin.String declared in kotlin.Any' type=kotlin.String origin=null + $this: GET_VAR 'sx: {S of .Test & Any} declared in .Test.foo.' type={S of .Test & Any} origin=null + 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: 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: 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: type:kotlin.Any + FUN name:bar visibility:public modality:FINAL () returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + BLOCK type=.bar..bar> origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.FIn<{T of .bar & Any}>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.bar..bar> + CONSTRUCTOR visibility:public <> () returnType:.bar..bar> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.FIn<{T of .bar & Any}>]' + FUN name:f visibility:public modality:OPEN <> ($this:.bar..bar>, sx:{T of .bar & Any}) returnType:kotlin.Unit + overridden: + public abstract fun f (x: T of .FIn): kotlin.Unit declared in .FIn + $this: VALUE_PARAMETER name: type:.bar..bar> + VALUE_PARAMETER name:sx index:0 type:{T of .bar & Any} + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun toString (): kotlin.String declared in kotlin.Any' type=kotlin.String origin=null + $this: GET_VAR 'sx: {T of .bar & Any} declared in .bar..f' type={T of .bar & Any} origin=null + 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 [fake_override,operator] declared in .FIn + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .FIn + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .FIn + $this: VALUE_PARAMETER name: type:kotlin.Any + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .bar.' type=.bar..bar> origin=OBJECT_LITERAL + CLASS INTERFACE name:I1 modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.I1.I1> + TYPE_PARAMETER name:T index:0 variance:in superTypes:[kotlin.Any?] + PROPERTY name:l visibility:public modality:ABSTRACT [val] + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.I1.I1>) returnType:@[ExtensionFunctionType] kotlin.Function1.I1, kotlin.Unit> + correspondingProperty: PROPERTY name:l visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.I1.I1> + 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: 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: 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: type:kotlin.Any + CLASS INTERFACE name:I2 modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.I2.I2> + TYPE_PARAMETER name:T index:0 variance:in superTypes:[kotlin.Any?] + PROPERTY name:sam visibility:public modality:ABSTRACT [val] + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.I2.I2>) returnType:.FIn.I2> + correspondingProperty: PROPERTY name:sam visibility:public modality:ABSTRACT [val] + $this: VALUE_PARAMETER name: type:.I2.I2> + 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: 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: 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: type:kotlin.Any + CLASS CLASS name:AC modality:ABSTRACT visibility:public superTypes:[.I1.AC>; .I2.AC>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AC.AC> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.AC.AC> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:AC modality:ABSTRACT visibility:public superTypes:[.I1.AC>; .I2.AC>]' + PROPERTY name:sam visibility:public modality:OPEN [val] + overridden: + public abstract sam: .FIn.I2> [val] + FIELD PROPERTY_BACKING_FIELD name:sam type:.FIn.AC> visibility:private [final] + EXPRESSION_BODY + TYPE_OP type=.FIn.AC> origin=SAM_CONVERSION typeOperand=.FIn.AC> + CALL 'public abstract fun (): @[ExtensionFunctionType] kotlin.Function1.AC, kotlin.Unit> [fake_override] declared in .AC' type=@[ExtensionFunctionType] kotlin.Function1.AC, kotlin.Unit> origin=GET_PROPERTY + $this: GET_VAR ': .AC.AC> declared in .AC' type=.AC.AC> origin=null + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:OPEN <> ($this:.AC.AC>) returnType:.FIn.AC> + correspondingProperty: PROPERTY name:sam visibility:public modality:OPEN [val] + overridden: + public abstract fun (): .FIn.I2> declared in .I2 + $this: VALUE_PARAMETER name: type:.AC.AC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun (): .FIn.AC> declared in .AC' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:sam type:.FIn.AC> visibility:private [final]' type=.FIn.AC> origin=null + receiver: GET_VAR ': .AC.AC> declared in .AC.' type=.AC.AC> origin=null + PROPERTY FAKE_OVERRIDE name:l visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract l: @[ExtensionFunctionType] kotlin.Function1.I1, kotlin.Unit> [val] + FUN FAKE_OVERRIDE name: visibility:public modality:ABSTRACT <> ($this:.I1.AC>) returnType:@[ExtensionFunctionType] kotlin.Function1.AC, kotlin.Unit> [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:l visibility:public modality:ABSTRACT [fake_override,val] + overridden: + public abstract fun (): @[ExtensionFunctionType] kotlin.Function1.I1, kotlin.Unit> declared in .I1 + $this: VALUE_PARAMETER name: type:.I1.AC> + 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 [fake_override,operator] declared in .I1 + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in .I2 + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .I1 + public open fun hashCode (): kotlin.Int [fake_override] declared in .I2 + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .I1 + public open fun toString (): kotlin.String [fake_override] declared in .I2 + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:AD modality:ABSTRACT visibility:public superTypes:[.AC<{T of .AD & Any}>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AD.AD> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.AD.AD> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .AC' + : {T of .AD & Any} + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:AD modality:ABSTRACT visibility:public superTypes:[.AC<{T of .AD & Any}>]' + PROPERTY name:l visibility:public modality:OPEN [val] + overridden: + public abstract l: @[ExtensionFunctionType] kotlin.Function1.AC, kotlin.Unit> [fake_override,val] + FIELD PROPERTY_BACKING_FIELD name:l type:@[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> visibility:private [final] + EXPRESSION_BODY + FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:{T of .AD & Any}) returnType:kotlin.Unit + $receiver: VALUE_PARAMETER name:$this$null type:{T of .AD & Any} + BLOCK_BODY + RETURN type=kotlin.Nothing from='local final fun (): kotlin.Unit declared in .AD.l' + GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:OPEN <> ($this:.AD.AD>) returnType:@[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> + correspondingProperty: PROPERTY name:l visibility:public modality:OPEN [val] + overridden: + public abstract fun (): @[ExtensionFunctionType] kotlin.Function1.AC, kotlin.Unit> [fake_override] declared in .AC + $this: VALUE_PARAMETER name: type:.AD.AD> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun (): @[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> declared in .AD' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:l type:@[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> visibility:private [final]' type=@[ExtensionFunctionType] kotlin.Function1<{T of .AD & Any}, kotlin.Unit> origin=null + receiver: GET_VAR ': .AD.AD> declared in .AD.' type=.AD.AD> origin=null + PROPERTY FAKE_OVERRIDE name:sam visibility:public modality:OPEN [fake_override,val] + overridden: + public open sam: .FIn.AC> [val] + FUN FAKE_OVERRIDE name: visibility:public modality:OPEN <> ($this:.AC<{T of .AD & Any}>) returnType:.FIn<{T of .AD & Any}> [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:sam visibility:public modality:OPEN [fake_override,val] + overridden: + public open fun (): .FIn.AC> declared in .AC + $this: VALUE_PARAMETER name: type:.AC<{T of .AD & 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 [fake_override,operator] declared in .AC + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .AC + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .AC + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/types/definitelyNonNullSAM.kt b/compiler/testData/ir/irText/types/definitelyNonNullSAM.kt new file mode 100644 index 00000000000..1d93c4c4406 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullSAM.kt @@ -0,0 +1,33 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY +// SKIP_KT_DUMP + +fun interface FIn { + fun f(x: T) +} + +class Test { + fun foo() = FIn { sx -> sx.toString() } +} + +fun bar() { + object : FIn { + override fun f(sx: (T & Any)) { sx.toString() } + } +} + +interface I1 { + val l: T.() -> Unit +} + +interface I2 { + val sam: FIn +} + +abstract class AC : I1, I2 { + override val sam: FIn = FIn(l) +} + +abstract class AD : AC() { + override val l: (T & Any).() -> Unit = { } +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNonNullWithJava.ir.txt b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.ir.txt new file mode 100644 index 00000000000..5d18811e873 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.ir.txt @@ -0,0 +1,27 @@ +FILE fqName: fileName:/main.kt + CLASS INTERFACE name:B modality:ABSTRACT visibility:public superTypes:[.A.B>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.B.B> + TYPE_PARAMETER name:T1 index:0 variance: superTypes:[kotlin.Any?] + FUN name:foo visibility:public modality:ABSTRACT <> ($this:.B.B>, x:T1 of .B) returnType:T1 of .B + overridden: + public abstract fun foo (x: @[FlexibleNullability] T of .A?): @[FlexibleNullability] T of .A? declared in .A + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:x index:0 type:T1 of .B + FUN name:bar visibility:public modality:ABSTRACT <> ($this:.B.B>, x:{T1 of .B & Any}) returnType:{T1 of .B & Any} + overridden: + public abstract fun bar (x: @[EnhancedNullability] T of .A): @[EnhancedNullability] T of .A declared in .A + $this: VALUE_PARAMETER name: type:.B.B> + VALUE_PARAMETER name:x index:0 type:{T1 of .B & 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 [fake_override,operator] declared in .A + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .A + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt new file mode 100644 index 00000000000..1732d950fed --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt @@ -0,0 +1,19 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: ANY + +// FILE: A.java +import org.jetbrains.annotations.*; + +public interface A { + public T foo(T x) { return x; } + @NotNull + public T bar(@NotNull T x) {} +} + +// FILE: main.kt + +interface B : A { + override fun foo(x: T1): T1 + override fun bar(x: T1 & Any): T1 & Any +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt.txt b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt.txt new file mode 100644 index 00000000000..2e4d12b9033 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt.txt @@ -0,0 +1,5 @@ +interface B : A { + abstract override fun foo(x: T1): T1 + abstract override fun bar(x: (T1 & Any)): (T1 & Any) + +} diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.ir.txt b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.ir.txt new file mode 100644 index 00000000000..b3ac4e3eb87 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.ir.txt @@ -0,0 +1,95 @@ +FILE fqName: fileName:/definitelyNotNullAsArgument.kt + CLASS INTERFACE name:I modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.I.I> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + FUN name:input visibility:public modality:ABSTRACT <> ($this:.I.I>, t:T of .I) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.I.I> + VALUE_PARAMETER name:t index:0 type:T of .I + FUN name:output visibility:public modality:ABSTRACT <> ($this:.I.I>) returnType:T of .I + $this: VALUE_PARAMETER name: type:.I.I> + 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: 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: 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: type:kotlin.Any + FUN name:foo visibility:public modality:FINAL (i:.I<{T of .foo & Any}>) returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:i index:0 type:.I<{T of .foo & Any}> + BLOCK_BODY + CALL 'public abstract fun input (t: T of .I): kotlin.Unit declared in .I' type=kotlin.Unit origin=null + $this: GET_VAR 'i: .I<{T of .foo & Any}> declared in .foo' type=.I<{T of .foo & Any}> origin=null + t: CALL 'public abstract fun output (): T of .I declared in .I' type={T of .foo & Any} origin=null + $this: GET_VAR 'i: .I<{T of .foo & Any}> declared in .foo' type=.I<{T of .foo & Any}> origin=null + FUN name:bar visibility:public modality:FINAL (i:.I.bar & Any}>) returnType:{T of .bar & Any} + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:i index:0 type:.I.bar & Any}> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun bar (i: .I.bar & Any}>): {T of .bar & Any} declared in ' + CALL 'public abstract fun output (): T of .I declared in .I' type={T of .bar & Any} origin=null + $this: GET_VAR 'i: .I.bar & Any}> declared in .bar' type=.I.bar & Any}> origin=null + FUN name:qux visibility:public modality:FINAL (t:T of .qux, i:.I.qux & Any}>) returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:t index:0 type:T of .qux + VALUE_PARAMETER name:i index:1 type:.I.qux & Any}> + BLOCK_BODY + CALL 'public abstract fun input (t: T of .I): kotlin.Unit declared in .I' type=kotlin.Unit origin=null + $this: GET_VAR 'i: .I.qux & Any}> declared in .qux' type=.I.qux & Any}> origin=null + t: CALL 'public final fun CHECK_NOT_NULL (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): T0 of kotlin.internal.ir.CHECK_NOT_NULL declared in kotlin.internal.ir' type=T of .qux origin=EXCLEXCL + : T of .qux + arg0: GET_VAR 't: T of .qux declared in .qux' type=T of .qux origin=null + CLASS CLASS name:C modality:FINAL visibility:public superTypes:[.I<{TT of .C & Any}>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.C.C> + TYPE_PARAMETER name:TT index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> (t:TT of .C) returnType:.C.C> [primary] + VALUE_PARAMETER name:t index:0 type:TT of .C + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[.I<{TT of .C & Any}>]' + PROPERTY name:t visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:t type:TT of .C visibility:private [final] + EXPRESSION_BODY + GET_VAR 't: TT of .C declared in .C.' type=TT of .C origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C.C>) returnType:TT of .C + correspondingProperty: PROPERTY name:t visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): TT of .C declared in .C' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:t type:TT of .C visibility:private [final]' type=TT of .C origin=null + receiver: GET_VAR ': .C.C> declared in .C.' type=.C.C> origin=null + FUN name:input visibility:public modality:OPEN <> ($this:.C.C>, t:{TT of .C & Any}) returnType:kotlin.Unit + overridden: + public abstract fun input (t: T of .I): kotlin.Unit declared in .I + $this: VALUE_PARAMETER name: type:.C.C> + VALUE_PARAMETER name:t index:0 type:{TT of .C & Any} + BLOCK_BODY + FUN name:output visibility:public modality:OPEN <> ($this:.C.C>) returnType:{TT of .C & Any} + overridden: + public abstract fun output (): T of .I declared in .I + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun output (): {TT of .C & Any} declared in .C' + CALL 'public final fun CHECK_NOT_NULL (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): T0 of kotlin.internal.ir.CHECK_NOT_NULL declared in kotlin.internal.ir' type=TT of .C origin=EXCLEXCL + : TT of .C + arg0: CALL 'public final fun (): TT of .C declared in .C' type=TT of .C origin=GET_PROPERTY + $this: GET_VAR ': .C.C> declared in .C.output' type=.C.C> origin=null + 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 [fake_override,operator] declared in .I + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .I + $this: VALUE_PARAMETER name: 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 [fake_override] declared in .I + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt new file mode 100644 index 00000000000..79d74cf8023 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt @@ -0,0 +1,21 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY + +interface I { + fun input(t: T) + fun output(): T +} + +fun foo(i: I) { i.input(i.output()) } + +fun bar(i: I) = i.output() + +fun qux(t: T, i: I) { i.input(t!!) } + +class C(val t: TT): I { + override fun input(t: TT & Any) {} + override fun output(): TT & Any = t!! +} + +// TODO: FE gets crashed on that method, KT-49419 +//fun > foo2(p1: T, p2: T2) { p2.input(p1!!) } \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt.txt b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt.txt new file mode 100644 index 00000000000..571a54e7ad5 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt.txt @@ -0,0 +1,38 @@ +interface I { + abstract fun input(t: T) + abstract fun output(): T + +} + +fun foo(i: I<(T & Any)>) { + i.input(t = i.output()) +} + +fun bar(i: I): (T & Any) { + return i.output() +} + +fun qux(t: T, i: I) { + i.input(t = CHECK_NOT_NULL(arg0 = t)) +} + +class C : I<(TT & Any)> { + constructor(t: TT) /* primary */ { + super/*Any*/() + /* () */ + + } + + val t: TT + field = t + get + + override fun input(t: (TT & Any)) { + } + + override fun output(): (TT & Any) { + return CHECK_NOT_NULL(arg0 = .()) + } + +} + diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.ir.txt b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.ir.txt new file mode 100644 index 00000000000..18522413d65 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.ir.txt @@ -0,0 +1,23 @@ +FILE fqName: fileName:/definitelyNotNullAsReceiver.kt + FUN name:foo visibility:public modality:FINAL ($receiver:{T of .foo & Any}) returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + $receiver: VALUE_PARAMETER name: type:{T of .foo & Any} + BLOCK_BODY + FUN name:foo visibility:public modality:FINAL (l:kotlin.Function1<{T of .foo & Any}, kotlin.Unit>) returnType:kotlin.Unit + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:l index:0 type:kotlin.Function1<{T of .foo & Any}, kotlin.Unit> + BLOCK_BODY + FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.Unit + BLOCK_BODY + CALL 'public final fun foo (): kotlin.Unit declared in ' type=kotlin.Unit origin=null + : kotlin.String? + $receiver: CONST String type=kotlin.String value="" + CALL 'public final fun foo (l: kotlin.Function1<{T of .foo & Any}, kotlin.Unit>): kotlin.Unit declared in ' type=kotlin.Unit origin=null + : kotlin.String? + l: FUN_EXPR type=kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:kotlin.String) returnType:kotlin.Unit + VALUE_PARAMETER name:it index:0 type:kotlin.String + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + STRING_CONCATENATION type=kotlin.String + GET_VAR 'it: kotlin.String declared in .box.' type=kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt new file mode 100644 index 00000000000..3e60fac279b --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt @@ -0,0 +1,10 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY + +fun (T & Any).foo() {} +fun foo(l: (T & Any) -> Unit) {} + +fun box() { + "".foo() + foo { "$it" } +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt.txt b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt.txt new file mode 100644 index 00000000000..5b4afc74f99 --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt.txt @@ -0,0 +1,13 @@ +fun (T & Any).foo() { +} + +fun foo(l: Function1<(T & Any), Unit>) { +} + +fun box() { + "".foo() + foo(l = local fun (it: String) { + it /*~> Unit */ + } +) +} diff --git a/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.ir.txt b/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.ir.txt new file mode 100644 index 00000000000..42e5c37bc4b --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.ir.txt @@ -0,0 +1,80 @@ +FILE fqName: fileName:/definitelyNotNullWithIntersection1.kt + CLASS CLASS name:In modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.In.In> + TYPE_PARAMETER name:I index:0 variance:in superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> () returnType:.In.In> [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:In 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: 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: 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: type:kotlin.Any + FUN name:select visibility:public modality:FINAL (x:S of .select, y:S of .select, z:S of .select) returnType:S of .select + TYPE_PARAMETER name:S index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:x index:0 type:S of .select + VALUE_PARAMETER name:y index:1 type:S of .select + VALUE_PARAMETER name:z index:2 type:S of .select + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun select (x: S of .select, y: S of .select, z: S of .select): S of .select declared in ' + GET_VAR 'x: S of .select declared in .select' type=S of .select origin=null + FUN name:foo visibility:public modality:FINAL (a:kotlin.Array<.In<{T of .foo & Any}>>, b:kotlin.Array<.In>, c:kotlin.Array<.In.foo>>) returnType:kotlin.Boolean + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:a index:0 type:kotlin.Array<.In<{T of .foo & Any}>> + VALUE_PARAMETER name:b index:1 type:kotlin.Array<.In> + VALUE_PARAMETER name:c index:2 type:kotlin.Array<.In.foo>> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (a: kotlin.Array<.In<{T of .foo & Any}>>, b: kotlin.Array<.In>, c: kotlin.Array<.In.foo>>): kotlin.Boolean declared in ' + CALL 'public final fun ofType (y: kotlin.Any?): kotlin.Boolean [inline] declared in ' type=kotlin.Boolean origin=null + : kotlin.Any + $receiver: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array [operator] declared in kotlin.Array' type=.In origin=GET_ARRAY_ELEMENT + $this: CALL 'public final fun select (x: S of .select, y: S of .select, z: S of .select): S of .select declared in ' type=kotlin.Array.In> origin=null + : kotlin.Array.In> + x: GET_VAR 'a: kotlin.Array<.In<{T of .foo & Any}>> declared in .foo' type=kotlin.Array<.In<{T of .foo & Any}>> origin=null + y: GET_VAR 'b: kotlin.Array<.In> declared in .foo' type=kotlin.Array<.In> origin=null + z: GET_VAR 'c: kotlin.Array<.In.foo>> declared in .foo' type=kotlin.Array<.In.foo>> origin=null + index: CONST Int type=kotlin.Int value=0 + y: CONST Boolean type=kotlin.Boolean value=true + FUN name:ofType visibility:public modality:FINAL ($receiver:.In.ofType>, y:kotlin.Any?) returnType:kotlin.Boolean [inline] + TYPE_PARAMETER name:K index:0 variance: superTypes:[kotlin.Any?] + $receiver: VALUE_PARAMETER name: type:.In.ofType> + VALUE_PARAMETER name:y index:0 type:kotlin.Any? + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun ofType (y: kotlin.Any?): kotlin.Boolean [inline] declared in ' + TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=K of .ofType + GET_VAR 'y: kotlin.Any? declared in .ofType' type=kotlin.Any? origin=null + FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit + BLOCK_BODY + VAR name:a1 type:kotlin.Array<.In> [val] + CALL 'public final fun arrayOf (vararg elements: T of kotlin.arrayOf): kotlin.Array [inline] declared in kotlin' type=kotlin.Array<.In> origin=null + : .In + elements: VARARG type=kotlin.Array.In> varargElementType=.In + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .In' type=.In origin=null + : kotlin.Int + VAR name:a2 type:kotlin.Array<.In> [val] + CALL 'public final fun arrayOf (vararg elements: T of kotlin.arrayOf): kotlin.Array [inline] declared in kotlin' type=kotlin.Array<.In> origin=null + : .In + elements: VARARG type=kotlin.Array.In> varargElementType=.In + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .In' type=.In origin=null + : kotlin.String + VAR name:a3 type:kotlin.Array<.In> [val] + CALL 'public final fun arrayOf (vararg elements: T of kotlin.arrayOf): kotlin.Array [inline] declared in kotlin' type=kotlin.Array<.In> origin=null + : .In + elements: VARARG type=kotlin.Array.In> varargElementType=.In + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .In' type=.In origin=null + : kotlin.Int + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public final fun foo (a: kotlin.Array<.In<{T of .foo & Any}>>, b: kotlin.Array<.In>, c: kotlin.Array<.In.foo>>): kotlin.Boolean declared in ' type=kotlin.Boolean origin=null + : kotlin.Int + a: GET_VAR 'val a1: kotlin.Array<.In> [val] declared in .test' type=kotlin.Array<.In> origin=null + b: GET_VAR 'val a2: kotlin.Array<.In> [val] declared in .test' type=kotlin.Array<.In> origin=null + c: GET_VAR 'val a3: kotlin.Array<.In> [val] declared in .test' type=kotlin.Array<.In> origin=null diff --git a/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt b/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt new file mode 100644 index 00000000000..ddbec060fec --- /dev/null +++ b/compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt @@ -0,0 +1,20 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY +// SKIP_KT_DUMP + +class In + +fun select(x: S, y: S, z: S): S = x + +fun foo(a: Array>, b: Array>, c: Array>) = + select(a, b, c)[0].ofType(true) + +inline fun In.ofType(y: Any?) = + y is K + +fun test() { + val a1 = arrayOf(In()) + val a2 = arrayOf(In()) + val a3 = arrayOf(In()) + foo(a1, a2, a3) +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.ir.txt b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.ir.txt new file mode 100644 index 00000000000..acbe33381c6 --- /dev/null +++ b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.ir.txt @@ -0,0 +1,30 @@ +FILE fqName: fileName:/typeCheckOnDefinitelyNotNull.kt + FUN name:asFoo visibility:public modality:FINAL (t:T of .asFoo) returnType:{T of .asFoo & Any} + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:t index:0 type:T of .asFoo + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun asFoo (t: T of .asFoo): {T of .asFoo & Any} declared in ' + TYPE_OP type={T of .asFoo & Any} origin=CAST typeOperand={T of .asFoo & Any} + GET_VAR 't: T of .asFoo declared in .asFoo' type=T of .asFoo origin=null + FUN name:safeAsFoo visibility:public modality:FINAL (t:T of .safeAsFoo) returnType:T of .safeAsFoo? + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:t index:0 type:T of .safeAsFoo + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun safeAsFoo (t: T of .safeAsFoo): T of .safeAsFoo? declared in ' + TYPE_OP type=T of .safeAsFoo? origin=SAFE_CAST typeOperand={T of .safeAsFoo & Any} + GET_VAR 't: T of .safeAsFoo declared in .safeAsFoo' type=T of .safeAsFoo origin=null + FUN name:implicitAsFoo visibility:public modality:FINAL (x:kotlin.Any) returnType:kotlin.Int [inline] + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.CharSequence?] + VALUE_PARAMETER name:x index:0 type:kotlin.Any + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun implicitAsFoo (x: kotlin.Any): kotlin.Int [inline] declared in ' + WHEN type=kotlin.Int origin=IF + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=T of .implicitAsFoo + GET_VAR 'x: kotlin.Any declared in .implicitAsFoo' type=kotlin.Any origin=null + then: CONST Int type=kotlin.Int value=0 + BRANCH + if: CONST Boolean type=kotlin.Boolean value=true + then: CALL 'public abstract fun (): kotlin.Int declared in kotlin.CharSequence' type=kotlin.Int origin=GET_PROPERTY + $this: TYPE_OP type={T of .implicitAsFoo & Any} origin=IMPLICIT_CAST typeOperand={T of .implicitAsFoo & Any} + GET_VAR 'x: kotlin.Any declared in .implicitAsFoo' type=kotlin.Any origin=null diff --git a/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt new file mode 100644 index 00000000000..29568831ed3 --- /dev/null +++ b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt @@ -0,0 +1,8 @@ +//!LANGUAGE: +DefinitelyNonNullableTypes +// IGNORE_BACKEND_FIR: ANY + +fun asFoo(t: T) = t as (T & Any) +fun safeAsFoo(t: T) = t as? (T & Any) + +inline fun implicitAsFoo(x: Any) = + if (x !is T) 0 else x.length \ No newline at end of file diff --git a/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt.txt b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt.txt new file mode 100644 index 00000000000..87504ad3551 --- /dev/null +++ b/compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt.txt @@ -0,0 +1,15 @@ +fun asFoo(t: T): (T & Any) { + return t as (T & Any) +} + +fun safeAsFoo(t: T): T? { + return t as? (T & Any) +} + +inline fun implicitAsFoo(x: Any): Int { + return when { + x !is T -> 0 + else -> x /*as (T & Any) */.() + } +} + 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 8a522e43cc8..21324fc91b2 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 @@ -2704,6 +2704,48 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/types/coercionToUnitInLambdaReturnValue.kt"); } + @Test + @TestMetadata("definitelyNonNull.kt") + public void testDefinitelyNonNull() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNull.kt"); + } + + @Test + @TestMetadata("definitelyNonNullOverride.kt") + public void testDefinitelyNonNullOverride() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullOverride.kt"); + } + + @Test + @TestMetadata("definitelyNonNullSAM.kt") + public void testDefinitelyNonNullSAM() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullSAM.kt"); + } + + @Test + @TestMetadata("definitelyNonNullWithJava.kt") + public void testDefinitelyNonNullWithJava() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullWithJava.kt"); + } + + @Test + @TestMetadata("definitelyNotNullAsArgument.kt") + public void testDefinitelyNotNullAsArgument() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt"); + } + + @Test + @TestMetadata("definitelyNotNullAsReceiver.kt") + public void testDefinitelyNotNullAsReceiver() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt"); + } + + @Test + @TestMetadata("definitelyNotNullWithIntersection1.kt") + public void testDefinitelyNotNullWithIntersection1() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt"); + } + @Test @TestMetadata("genericDelegatedDeepProperty.kt") public void testGenericDelegatedDeepProperty() throws Exception { @@ -2830,6 +2872,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/types/typeAliasWithUnsafeVariance.kt"); } + @Test + @TestMetadata("typeCheckOnDefinitelyNotNull.kt") + public void testTypeCheckOnDefinitelyNotNull() throws Exception { + runTest("compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt"); + } + @Nested @TestMetadata("compiler/testData/ir/irText/types/nullChecks") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java index 636067c3b22..09afbabd6ff 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/ir/KlibTextTestCaseGenerated.java @@ -1996,6 +1996,36 @@ public class KlibTextTestCaseGenerated extends AbstractKlibTextTestCase { runTest("compiler/testData/ir/irText/types/coercionToUnitInLambdaReturnValue.kt"); } + @TestMetadata("definitelyNonNull.kt") + public void testDefinitelyNonNull() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNull.kt"); + } + + @TestMetadata("definitelyNonNullOverride.kt") + public void testDefinitelyNonNullOverride() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullOverride.kt"); + } + + @TestMetadata("definitelyNonNullSAM.kt") + public void testDefinitelyNonNullSAM() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNonNullSAM.kt"); + } + + @TestMetadata("definitelyNotNullAsArgument.kt") + public void testDefinitelyNotNullAsArgument() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsArgument.kt"); + } + + @TestMetadata("definitelyNotNullAsReceiver.kt") + public void testDefinitelyNotNullAsReceiver() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullAsReceiver.kt"); + } + + @TestMetadata("definitelyNotNullWithIntersection1.kt") + public void testDefinitelyNotNullWithIntersection1() throws Exception { + runTest("compiler/testData/ir/irText/types/definitelyNotNullWithIntersection1.kt"); + } + @TestMetadata("genericDelegatedDeepProperty.kt") public void testGenericDelegatedDeepProperty() throws Exception { runTest("compiler/testData/ir/irText/types/genericDelegatedDeepProperty.kt"); @@ -2081,6 +2111,11 @@ public class KlibTextTestCaseGenerated extends AbstractKlibTextTestCase { runTest("compiler/testData/ir/irText/types/typeAliasWithUnsafeVariance.kt"); } + @TestMetadata("typeCheckOnDefinitelyNotNull.kt") + public void testTypeCheckOnDefinitelyNotNull() throws Exception { + runTest("compiler/testData/ir/irText/types/typeCheckOnDefinitelyNotNull.kt"); + } + @TestMetadata("compiler/testData/ir/irText/types/nullChecks") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)