From 45a0850d95f0d23b704c374893132515e30912ee Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 13 Oct 2020 21:56:04 +0200 Subject: [PATCH] Fix KotlinType.isNullabilityFlexible for types based on type parameters In the compiler, this function was used in psi2ir (and it affected nullability annotations in the resulting JVM class files), in "useless elvis with null on the right side" diagnostic checker, and in light classes. #KT-42650 Fixed --- .../nullabilityAnnotations/platformTypes.kt | 10 +++++++ .../nullabilityAnnotations/platformTypes.txt | 3 ++- .../uselessElvisRightIsNull.fir.kt | 8 ++++++ .../uselessElvisRightIsNull.kt | 8 ++++++ .../uselessElvisRightIsNull.txt | 8 ++++++ .../sam/genericSamProjectedOut.txt | 6 ++--- .../expressions/sam/genericSamSmartcast.txt | 4 +-- .../samConversionInGenericConstructorCall.txt | 4 +-- ...mConversionInGenericConstructorCall_NI.txt | 8 +++--- .../sam/samConversionToGeneric.txt | 24 ++++++++--------- .../sam/samConversionsWithSmartCasts.txt | 2 +- .../ir/irText/firProblems/AllCandidates.txt | 26 +++++++++---------- .../typeParametersInImplicitCast.txt | 16 ++++++------ .../testData/ir/irText/stubs/builtinMap.txt | 18 ++++++------- .../javaConstructorWithTypeParameters.txt | 4 +-- .../types/receiverOfIntersectionType.txt | 4 +-- .../smartCastOnFieldReceiverOfGenericType.txt | 4 +-- .../jetbrains/kotlin/types/flexibleTypes.kt | 3 +-- 18 files changed, 97 insertions(+), 63 deletions(-) diff --git a/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.kt b/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.kt index 4fc6b8e00b7..7ae564fd58a 100644 --- a/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.kt +++ b/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.kt @@ -1,8 +1,18 @@ // WITH_RUNTIME +// FILE: test.kt + import java.util.Collections class PlatformTypes { fun simplyPlatform() = Collections.singletonList("")[0] fun bothNullable() = Collections.emptyList() ?: null fun bothNotNull() = Collections.emptyList()!! + + fun generic(j: J) = j.get() +} + +// FILE: J.java + +public interface J { + R get(); } diff --git a/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.txt b/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.txt index 2f56cdcd690..17e4e13b6cb 100644 --- a/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.txt +++ b/compiler/testData/codegen/bytecodeListing/nullabilityAnnotations/platformTypes.txt @@ -1,8 +1,9 @@ @kotlin.Metadata public final class PlatformTypes { - // source: 'platformTypes.kt' + // source: 'test.kt' public method (): void public final @org.jetbrains.annotations.NotNull method bothNotNull(): java.util.List public final @org.jetbrains.annotations.Nullable method bothNullable(): java.util.List + public final method generic(@org.jetbrains.annotations.NotNull p0: J): java.lang.Object public final method simplyPlatform(): java.lang.String } diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.fir.kt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.fir.kt index d3fa74464b2..d57eeb205b9 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.fir.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.fir.kt @@ -24,6 +24,12 @@ public class JJJ { public static JJJ staticNNN; } +// FILE: JJJJ.java + +public interface JJJJ { + R get(); +} + // FILE: k.kt fun test() { @@ -37,3 +43,5 @@ fun test() { fun foo(a: Any?) { } + +fun test2(j: JJJJ) = j.get() ?: null diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt index ee556503d25..f3084b30dfb 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt @@ -24,6 +24,12 @@ public class JJJ { public static JJJ staticNNN; } +// FILE: JJJJ.java + +public interface JJJJ { + R get(); +} + // FILE: k.kt fun test() { @@ -37,3 +43,5 @@ fun test() { fun foo(a: Any?) { } + +fun test2(j: JJJJ) = j.get() ?: null diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt index 1c53626880e..d3cd6246208 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt @@ -2,6 +2,7 @@ package public fun foo(/*0*/ a: kotlin.Any?): kotlin.Unit public fun test(): kotlin.Unit +public fun test2(/*0*/ j: JJJJ): R? public open class J { public constructor J() @@ -32,3 +33,10 @@ public open class JJJ { // Static members @org.jetbrains.annotations.NotNull public final var staticNNN: JJJ } + +public interface JJJJ { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun get(): R! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.txt b/compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.txt index f29c72de553..e75ce63b23e 100644 --- a/compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.txt +++ b/compiler/testData/ir/irText/expressions/sam/genericSamProjectedOut.txt @@ -2,7 +2,7 @@ FILE fqName: fileName:/genericSamProjectedOut.kt FUN name:test visibility:public modality:FINAL <> (a:example.SomeJavaClass) returnType:kotlin.Unit VALUE_PARAMETER name:a index:0 type:example.SomeJavaClass BLOCK_BODY - CALL 'public open fun someFunction (hello: @[FlexibleNullability] example.Hello?): kotlin.Unit declared in example.SomeJavaClass' type=kotlin.Unit origin=null + CALL 'public open fun someFunction (hello: @[FlexibleNullability] example.Hello<@[FlexibleNullability] A of example.SomeJavaClass?>?): kotlin.Unit declared in example.SomeJavaClass' type=kotlin.Unit origin=null $this: GET_VAR 'a: example.SomeJavaClass declared in .test' type=example.SomeJavaClass origin=null hello: TYPE_OP type=@[FlexibleNullability] example.Hello? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] example.Hello? FUN_EXPR type=kotlin.Function1<@[FlexibleNullability] kotlin.String?, kotlin.Unit> origin=LAMBDA @@ -11,7 +11,7 @@ FILE fqName: fileName:/genericSamProjectedOut.kt BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (it: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .test' GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit - CALL 'public open fun plus (hello: @[FlexibleNullability] example.Hello?): kotlin.Unit [operator] declared in example.SomeJavaClass' type=kotlin.Unit origin=PLUS + CALL 'public open fun plus (hello: @[FlexibleNullability] example.Hello<@[FlexibleNullability] A of example.SomeJavaClass?>?): kotlin.Unit [operator] declared in example.SomeJavaClass' type=kotlin.Unit origin=PLUS $this: GET_VAR 'a: example.SomeJavaClass declared in .test' type=example.SomeJavaClass origin=null hello: TYPE_OP type=@[FlexibleNullability] example.Hello? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] example.Hello? FUN_EXPR type=kotlin.Function1<@[FlexibleNullability] kotlin.String?, kotlin.Unit> origin=LAMBDA @@ -20,7 +20,7 @@ FILE fqName: fileName:/genericSamProjectedOut.kt BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (it: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .test' GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit - CALL 'public open fun get (hello: @[FlexibleNullability] example.Hello?): kotlin.Unit [operator] declared in example.SomeJavaClass' type=kotlin.Unit origin=GET_ARRAY_ELEMENT + CALL 'public open fun get (hello: @[FlexibleNullability] example.Hello<@[FlexibleNullability] A of example.SomeJavaClass?>?): kotlin.Unit [operator] declared in example.SomeJavaClass' type=kotlin.Unit origin=GET_ARRAY_ELEMENT $this: GET_VAR 'a: example.SomeJavaClass declared in .test' type=example.SomeJavaClass origin=null hello: TYPE_OP type=@[FlexibleNullability] example.Hello? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] example.Hello? FUN_EXPR type=kotlin.Function1<@[FlexibleNullability] kotlin.String?, kotlin.Unit> origin=LAMBDA diff --git a/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt index 3285497c885..6691f1859ff 100644 --- a/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt +++ b/compiler/testData/ir/irText/expressions/sam/genericSamSmartcast.txt @@ -9,10 +9,10 @@ FILE fqName: fileName:/genericSamSmartcast.kt 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 + CALL 'public open fun call (block: @[FlexibleNullability] .A.I<@[FlexibleNullability] T of .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?>? + block: TYPE_OP type=@[FlexibleNullability] .A.I<@[FlexibleNullability] T of .A?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .A.I<@[FlexibleNullability] T of .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? diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall.txt b/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall.txt index 48c9baad066..d0156cf0372 100644 --- a/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall.txt +++ b/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall.txt @@ -3,7 +3,7 @@ FILE fqName: fileName:/samConversionInGenericConstructorCall.kt VALUE_PARAMETER name:f index:0 type:kotlin.Function1 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test1 (f: kotlin.Function1): .C<@[FlexibleNullability] kotlin.String?> declared in ' - CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J.C?, X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null + CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J<@[FlexibleNullability] X of .C?, @[FlexibleNullability] X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.String? jxx: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? GET_VAR 'f: kotlin.Function1 declared in .test1' type=kotlin.Function1 origin=null @@ -14,7 +14,7 @@ FILE fqName: fileName:/samConversionInGenericConstructorCall.kt TYPE_OP type=kotlin.Function1 origin=CAST typeOperand=kotlin.Function1 GET_VAR 'x: kotlin.Any declared in .test2' type=kotlin.Any origin=null TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit - CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J.C?, X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null + CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J<@[FlexibleNullability] X of .C?, @[FlexibleNullability] X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.String? jxx: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? TYPE_OP type=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?> origin=IMPLICIT_CAST typeOperand=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?> diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall_NI.txt b/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall_NI.txt index 9d039e521eb..7d57b2140ad 100644 --- a/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall_NI.txt +++ b/compiler/testData/ir/irText/expressions/sam/samConversionInGenericConstructorCall_NI.txt @@ -4,9 +4,9 @@ FILE fqName: fileName:/samConversionInGenericConstructorCall_NI.kt VALUE_PARAMETER name:f2 index:1 type:kotlin.Function1 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test3 (f1: kotlin.Function1, f2: kotlin.Function1): .C.D<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?> declared in ' - CONSTRUCTOR_CALL 'public constructor (jxy: @[FlexibleNullability] .J.C?, Y of .C.D?>?) declared in .C.D' type=.C.D<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?> origin=null + CONSTRUCTOR_CALL 'public constructor (jxy: @[FlexibleNullability] .J<@[FlexibleNullability] X of .C?, @[FlexibleNullability] Y of .C.D?>?) declared in .C.D' type=.C.D<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.Int? - $outer: CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J.C?, X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null + $outer: CONSTRUCTOR_CALL 'public constructor (jxx: @[FlexibleNullability] .J<@[FlexibleNullability] X of .C?, @[FlexibleNullability] X of .C?>?) declared in .C' type=.C<@[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.String? jxx: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?>? GET_VAR 'f1: kotlin.Function1 declared in .test3' type=kotlin.Function1 origin=null @@ -94,7 +94,7 @@ FILE fqName: fileName:/samConversionInGenericConstructorCall_NI.kt VALUE_PARAMETER name:f index:0 type:kotlin.Function1 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun testGenericJavaCtor1 (f: kotlin.Function1): .G<@[FlexibleNullability] kotlin.String?> declared in ' - CONSTRUCTOR_CALL 'public constructor (x: @[FlexibleNullability] .J.G.?, TClass of .G?>?) declared in .G' type=.G<@[FlexibleNullability] kotlin.String?> origin=null + CONSTRUCTOR_CALL 'public constructor (x: @[FlexibleNullability] .J<@[FlexibleNullability] TCtor of .G.?, @[FlexibleNullability] TClass of .G?>?) declared in .G' type=.G<@[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.String? : @[FlexibleNullability] kotlin.Int? x: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?>? @@ -106,7 +106,7 @@ FILE fqName: fileName:/samConversionInGenericConstructorCall_NI.kt TYPE_OP type=kotlin.Function1 origin=CAST typeOperand=kotlin.Function1 GET_VAR 'x: kotlin.Any declared in .testGenericJavaCtor2' type=kotlin.Any origin=null TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit - CONSTRUCTOR_CALL 'public constructor (x: @[FlexibleNullability] .J.G.?, TClass of .G?>?) declared in .G' type=.G<@[FlexibleNullability] kotlin.String?> origin=null + CONSTRUCTOR_CALL 'public constructor (x: @[FlexibleNullability] .J<@[FlexibleNullability] TCtor of .G.?, @[FlexibleNullability] TClass of .G?>?) declared in .G' type=.G<@[FlexibleNullability] kotlin.String?> origin=null : @[FlexibleNullability] kotlin.String? : @[FlexibleNullability] kotlin.Int? x: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.Int?, @[FlexibleNullability] kotlin.String?>? diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionToGeneric.txt b/compiler/testData/ir/irText/expressions/sam/samConversionToGeneric.txt index 76f114dc297..5407c55305c 100644 --- a/compiler/testData/ir/irText/expressions/sam/samConversionToGeneric.txt +++ b/compiler/testData/ir/irText/expressions/sam/samConversionToGeneric.txt @@ -22,7 +22,7 @@ FILE fqName: fileName:/samConversionToGeneric.kt FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test3 (): kotlin.Unit declared in ' - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null : @[FlexibleNullability] kotlin.String? j: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? FUN_EXPR type=kotlin.Function1 origin=LAMBDA @@ -37,7 +37,7 @@ FILE fqName: fileName:/samConversionToGeneric.kt TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit TYPE_OP type=.J origin=CAST typeOperand=.J GET_VAR 'a: kotlin.Any declared in .test4' type=kotlin.Any origin=null - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null : @[FlexibleNullability] kotlin.String? j: TYPE_OP type=.J<@[FlexibleNullability] kotlin.String?> origin=IMPLICIT_CAST typeOperand=.J<@[FlexibleNullability] kotlin.String?> GET_VAR 'a: kotlin.Any declared in .test4' type=kotlin.Any origin=null @@ -47,7 +47,7 @@ FILE fqName: fileName:/samConversionToGeneric.kt TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit TYPE_OP type=kotlin.Function1 origin=CAST typeOperand=kotlin.Function1 GET_VAR 'a: kotlin.Any declared in .test5' type=kotlin.Any origin=null - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null : @[FlexibleNullability] kotlin.String? j: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? TYPE_OP type=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?> origin=IMPLICIT_CAST typeOperand=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] kotlin.String?, @[FlexibleNullability] kotlin.String?> @@ -56,9 +56,9 @@ FILE fqName: fileName:/samConversionToGeneric.kt TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:a index:0 type:kotlin.Function1.test6, T of .test6> BLOCK_BODY - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null - : T of .test6? - j: TYPE_OP type=@[FlexibleNullability] .J.test6?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J.test6?>? + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + : @[FlexibleNullability] T of .test6? + j: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] T of .test6?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] T of .test6?>? GET_VAR 'a: kotlin.Function1.test6, T of .test6> declared in .test6' type=kotlin.Function1.test6, T of .test6> origin=null FUN name:test7 visibility:public modality:FINAL (a:kotlin.Any) returnType:kotlin.Unit TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] @@ -67,10 +67,10 @@ FILE fqName: fileName:/samConversionToGeneric.kt TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit TYPE_OP type=kotlin.Function1.test7, T of .test7> origin=CAST typeOperand=kotlin.Function1.test7, T of .test7> GET_VAR 'a: kotlin.Any declared in .test7' type=kotlin.Any origin=null - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null - : T of .test7? - j: TYPE_OP type=@[FlexibleNullability] .J.test7?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J.test7?>? - TYPE_OP type=kotlin.Function1<@[ParameterName(name = 'x')] T of .test7?, T of .test7?> origin=IMPLICIT_CAST typeOperand=kotlin.Function1<@[ParameterName(name = 'x')] T of .test7?, T of .test7?> + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + : @[FlexibleNullability] T of .test7? + j: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] T of .test7?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] T of .test7?>? + TYPE_OP type=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] T of .test7?, @[FlexibleNullability] T of .test7?> origin=IMPLICIT_CAST typeOperand=kotlin.Function1<@[ParameterName(name = 'x')] @[FlexibleNullability] T of .test7?, @[FlexibleNullability] T of .test7?> GET_VAR 'a: kotlin.Any declared in .test7' type=kotlin.Any origin=null FUN name:test8 visibility:public modality:FINAL <> (efn:@[ExtensionFunctionType] kotlin.Function1) returnType:.J<@[FlexibleNullability] kotlin.String?> VALUE_PARAMETER name:efn index:0 type:@[ExtensionFunctionType] kotlin.Function1 @@ -81,14 +81,14 @@ FILE fqName: fileName:/samConversionToGeneric.kt FUN name:test9 visibility:public modality:FINAL <> (efn:@[ExtensionFunctionType] kotlin.Function1) returnType:kotlin.Unit VALUE_PARAMETER name:efn index:0 type:@[ExtensionFunctionType] kotlin.Function1 BLOCK_BODY - CALL 'public open fun bar (j: @[FlexibleNullability] .J.H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + CALL 'public open fun bar (j: @[FlexibleNullability] .J<@[FlexibleNullability] X of .H.bar?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null : @[FlexibleNullability] kotlin.String? j: TYPE_OP type=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J<@[FlexibleNullability] kotlin.String?>? GET_VAR 'efn: @[ExtensionFunctionType] kotlin.Function1 declared in .test9' type=@[ExtensionFunctionType] kotlin.Function1 origin=null FUN name:test10 visibility:public modality:FINAL <> (fn:kotlin.Function1) returnType:kotlin.Unit VALUE_PARAMETER name:fn index:0 type:kotlin.Function1 BLOCK_BODY - CALL 'public open fun bar2x (j2x: @[FlexibleNullability] .J2X.H.bar2x?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null + CALL 'public open fun bar2x (j2x: @[FlexibleNullability] .J2X<@[FlexibleNullability] Y of .H.bar2x?>?): kotlin.Unit declared in .H' type=kotlin.Unit origin=null : @[FlexibleNullability] kotlin.Int? j2x: TYPE_OP type=@[FlexibleNullability] .J2X<@[FlexibleNullability] kotlin.Int?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] .J2X<@[FlexibleNullability] kotlin.Int?>? GET_VAR 'fn: kotlin.Function1 declared in .test10' type=kotlin.Function1 origin=null diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.txt b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.txt index 10ded19126e..4c3e145d580 100644 --- a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.txt +++ b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.txt @@ -107,7 +107,7 @@ FILE fqName: fileName:/samConversionsWithSmartCasts.kt $this: CONSTRUCTOR_CALL 'public constructor () [primary] declared in .J' type=.J origin=null r: TYPE_OP type=@[FlexibleNullability] java.lang.Runnable? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] java.lang.Runnable? TYPE_OP type=kotlin.Function0 origin=IMPLICIT_NOTNULL typeOperand=kotlin.Function0 - CALL 'public open fun id (x: T of .J.id?): T of .J.id? declared in .J' type=@[FlexibleNullability] kotlin.Function0? origin=null + CALL 'public open fun id (x: @[FlexibleNullability] T of .J.id?): @[FlexibleNullability] T of .J.id? declared in .J' type=@[FlexibleNullability] kotlin.Function0? origin=null : @[FlexibleNullability] kotlin.Function0? x: GET_VAR 'a: kotlin.Function0 declared in .test8' type=kotlin.Function0 origin=null FUN name:test9 visibility:public modality:FINAL <> () returnType:kotlin.Unit diff --git a/compiler/testData/ir/irText/firProblems/AllCandidates.txt b/compiler/testData/ir/irText/firProblems/AllCandidates.txt index f035da1e9a9..ce80173dadd 100644 --- a/compiler/testData/ir/irText/firProblems/AllCandidates.txt +++ b/compiler/testData/ir/irText/firProblems/AllCandidates.txt @@ -50,23 +50,23 @@ FILE fqName: fileName:/AllCandidates.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any - FUN name:allCandidatesResult visibility:private modality:FINAL (allCandidates:kotlin.collections.Collection<.MyCandidate>) returnType:@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? + FUN name:allCandidatesResult visibility:private modality:FINAL (allCandidates:kotlin.collections.Collection<.MyCandidate>) returnType:@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? TYPE_PARAMETER name:A index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:allCandidates index:0 type:kotlin.collections.Collection<.MyCandidate> BLOCK_BODY - RETURN type=kotlin.Nothing from='private final fun allCandidatesResult (allCandidates: kotlin.collections.Collection<.MyCandidate>): @[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? declared in ' - CALL 'public final fun apply (block: @[ExtensionFunctionType] kotlin.Function1): T of kotlin.apply [inline] declared in kotlin' type=@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? origin=null - : @[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? - $receiver: CALL 'public open fun nameNotFound (): @[FlexibleNullability] .OverloadResolutionResultsImpl.OverloadResolutionResultsImpl.nameNotFound?>? declared in .OverloadResolutionResultsImpl' type=@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? origin=null - : A of .allCandidatesResult? - block: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1<@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>?, kotlin.Unit> origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>?) returnType:kotlin.Unit - $receiver: VALUE_PARAMETER name: type:@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? + RETURN type=kotlin.Nothing from='private final fun allCandidatesResult (allCandidates: kotlin.collections.Collection<.MyCandidate>): @[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? declared in ' + CALL 'public final fun apply (block: @[ExtensionFunctionType] kotlin.Function1): T of kotlin.apply [inline] declared in kotlin' type=@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? origin=null + : @[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? + $receiver: CALL 'public open fun nameNotFound (): @[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] R of .OverloadResolutionResultsImpl.nameNotFound?>? declared in .OverloadResolutionResultsImpl' type=@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? origin=null + : @[FlexibleNullability] A of .allCandidatesResult? + block: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1<@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>?, kotlin.Unit> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>?) returnType:kotlin.Unit + $receiver: VALUE_PARAMETER name: type:@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? BLOCK_BODY - CALL 'public open fun setAllCandidates (allCandidates: @[FlexibleNullability] kotlin.collections.Collection<@[FlexibleNullability] .ResolvedCall.OverloadResolutionResultsImpl?>?>?): kotlin.Unit declared in .OverloadResolutionResultsImpl' type=kotlin.Unit origin=EQ - <1>: A of .allCandidatesResult? - $this: TYPE_OP type=.OverloadResolutionResultsImpl.allCandidatesResult?> origin=IMPLICIT_NOTNULL typeOperand=.OverloadResolutionResultsImpl.allCandidatesResult?> - GET_VAR ': @[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? declared in .allCandidatesResult.' type=@[FlexibleNullability] .OverloadResolutionResultsImpl.allCandidatesResult?>? origin=null + CALL 'public open fun setAllCandidates (allCandidates: @[FlexibleNullability] kotlin.collections.Collection<@[FlexibleNullability] .ResolvedCall<@[FlexibleNullability] D of .OverloadResolutionResultsImpl?>?>?): kotlin.Unit declared in .OverloadResolutionResultsImpl' type=kotlin.Unit origin=EQ + <1>: @[FlexibleNullability] A of .allCandidatesResult? + $this: TYPE_OP type=.OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?> origin=IMPLICIT_NOTNULL typeOperand=.OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?> + GET_VAR ': @[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? declared in .allCandidatesResult.' type=@[FlexibleNullability] .OverloadResolutionResultsImpl<@[FlexibleNullability] A of .allCandidatesResult?>? origin=null allCandidates: CALL 'public final fun map (transform: kotlin.Function1): kotlin.collections.List [inline] declared in kotlin.collections' type=kotlin.collections.List<.ResolvedCall.allCandidatesResult>> origin=null : .MyCandidate : .ResolvedCall.allCandidatesResult> diff --git a/compiler/testData/ir/irText/regressions/typeParametersInImplicitCast.txt b/compiler/testData/ir/irText/regressions/typeParametersInImplicitCast.txt index cbe81bfb666..6e6b27a2069 100644 --- a/compiler/testData/ir/irText/regressions/typeParametersInImplicitCast.txt +++ b/compiler/testData/ir/irText/regressions/typeParametersInImplicitCast.txt @@ -4,16 +4,16 @@ FILE fqName: fileName:/typeParametersInImplicitCast.kt VALUE_PARAMETER name:lss index:0 type:kotlin.collections.List.problematic>> BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun problematic (lss: kotlin.collections.List.problematic>>): kotlin.collections.List.problematic> declared in ' - CALL 'public final fun flatMap (transform: kotlin.Function1>): kotlin.collections.List [inline] declared in kotlin.collections' type=kotlin.collections.List.problematic?> origin=null + CALL 'public final fun flatMap (transform: kotlin.Function1>): kotlin.collections.List [inline] declared in kotlin.collections' type=kotlin.collections.List<@[FlexibleNullability] T of .problematic?> origin=null : kotlin.collections.List.problematic> - : T of .problematic? + : @[FlexibleNullability] T of .problematic? $receiver: GET_VAR 'lss: kotlin.collections.List.problematic>> declared in .problematic' type=kotlin.collections.List.problematic>> origin=null - transform: FUN_EXPR type=kotlin.Function1.problematic>, @[EnhancedNullability] kotlin.collections.List.problematic?>> origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:kotlin.collections.List.problematic>) returnType:@[EnhancedNullability] kotlin.collections.List.problematic?> + transform: FUN_EXPR type=kotlin.Function1.problematic>, @[EnhancedNullability] kotlin.collections.List<@[FlexibleNullability] T of .problematic?>> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> (it:kotlin.collections.List.problematic>) returnType:@[EnhancedNullability] kotlin.collections.List<@[FlexibleNullability] T of .problematic?> VALUE_PARAMETER name:it index:0 type:kotlin.collections.List.problematic> BLOCK_BODY - RETURN type=kotlin.Nothing from='local final fun (it: kotlin.collections.List.problematic>): @[EnhancedNullability] kotlin.collections.List.problematic?> declared in .problematic' - TYPE_OP type=kotlin.collections.List.problematic?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List.problematic?> - CALL 'public/*package*/ open fun id (v: @[FlexibleNullability] kotlin.collections.List.ListId.id?>?): @[EnhancedNullability] kotlin.collections.List.ListId.id?> declared in .ListId' type=@[EnhancedNullability] kotlin.collections.List.problematic?> origin=null - : T of .problematic? + RETURN type=kotlin.Nothing from='local final fun (it: kotlin.collections.List.problematic>): @[EnhancedNullability] kotlin.collections.List<@[FlexibleNullability] T of .problematic?> declared in .problematic' + TYPE_OP type=kotlin.collections.List<@[FlexibleNullability] T of .problematic?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[FlexibleNullability] T of .problematic?> + CALL 'public/*package*/ open fun id (v: @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] T of .ListId.id?>?): @[EnhancedNullability] kotlin.collections.List<@[FlexibleNullability] T of .ListId.id?> declared in .ListId' type=@[EnhancedNullability] kotlin.collections.List<@[FlexibleNullability] T of .problematic?> origin=null + : @[FlexibleNullability] T of .problematic? v: GET_VAR 'it: kotlin.collections.List.problematic> declared in .problematic.' type=kotlin.collections.List.problematic> origin=null diff --git a/compiler/testData/ir/irText/stubs/builtinMap.txt b/compiler/testData/ir/irText/stubs/builtinMap.txt index 96d77ecdabc..050f53c637f 100644 --- a/compiler/testData/ir/irText/stubs/builtinMap.txt +++ b/compiler/testData/ir/irText/stubs/builtinMap.txt @@ -16,19 +16,19 @@ FILE fqName: fileName:/builtinMap.kt pair: GET_VAR 'pair: kotlin.Pair.plus, V1 of .plus> declared in .plus' type=kotlin.Pair.plus, V1 of .plus> origin=null BRANCH if: CONST Boolean type=kotlin.Boolean value=true - then: CALL 'public final fun apply (block: @[ExtensionFunctionType] kotlin.Function1): T of kotlin.apply [inline] declared in kotlin' type=java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> } origin=null - : java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> } - $receiver: CONSTRUCTOR_CALL 'public constructor (p0: @[FlexibleNullability] kotlin.collections.Map?) declared in java.util.LinkedHashMap' type=java.util.LinkedHashMap.plus?, V1 of .plus?> origin=null - : K1 of .plus? - : V1 of .plus? + then: CALL 'public final fun apply (block: @[ExtensionFunctionType] kotlin.Function1): T of kotlin.apply [inline] declared in kotlin' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> } origin=null + : java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> } + $receiver: CONSTRUCTOR_CALL 'public constructor (p0: @[FlexibleNullability] kotlin.collections.Map?) declared in java.util.LinkedHashMap' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> origin=null + : @[FlexibleNullability] K1 of .plus? + : @[FlexibleNullability] V1 of .plus? p0: GET_VAR ': kotlin.collections.Map.plus, V1 of .plus> declared in .plus' type=kotlin.collections.Map.plus, V1 of .plus> origin=null - block: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> }, kotlin.Unit> origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> }) returnType:kotlin.Unit - $receiver: VALUE_PARAMETER name: type:java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> } + block: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1.plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> }, kotlin.Unit> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> }) returnType:kotlin.Unit + $receiver: VALUE_PARAMETER name: type:java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> } BLOCK_BODY TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit CALL 'public open fun put (key: @[EnhancedNullability] K of java.util.LinkedHashMap, value: @[EnhancedNullability] V of java.util.LinkedHashMap): @[EnhancedNullability] V of java.util.LinkedHashMap? [fake_override] declared in java.util.LinkedHashMap' type=@[EnhancedNullability] V1 of .plus? origin=null - $this: GET_VAR ': java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> } declared in .plus.' type=java.util.LinkedHashMap.plus?, V1 of .plus?>{ kotlin.collections.LinkedHashMap.plus?, V1 of .plus?> } origin=null + $this: GET_VAR ': java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> } declared in .plus.' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?>{ kotlin.collections.LinkedHashMap<@[FlexibleNullability] K1 of .plus?, @[FlexibleNullability] V1 of .plus?> } origin=null key: CALL 'public final fun (): A of kotlin.Pair declared in kotlin.Pair' type=K1 of .plus origin=GET_PROPERTY $this: GET_VAR 'pair: kotlin.Pair.plus, V1 of .plus> declared in .plus' type=kotlin.Pair.plus, V1 of .plus> origin=null value: CALL 'public final fun (): B of kotlin.Pair declared in kotlin.Pair' type=V1 of .plus origin=GET_PROPERTY diff --git a/compiler/testData/ir/irText/stubs/javaConstructorWithTypeParameters.txt b/compiler/testData/ir/irText/stubs/javaConstructorWithTypeParameters.txt index 06817186574..cbcce30d3cc 100644 --- a/compiler/testData/ir/irText/stubs/javaConstructorWithTypeParameters.txt +++ b/compiler/testData/ir/irText/stubs/javaConstructorWithTypeParameters.txt @@ -7,7 +7,7 @@ FILE fqName: fileName:/javaConstructorWithTypeParameters.kt FUN name:test2 visibility:public modality:FINAL <> () returnType:.J1 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test2 (): .J1 declared in ' - CONSTRUCTOR_CALL 'public constructor (x1: X1 of .J1.?) declared in .J1' type=.J1 origin=null + CONSTRUCTOR_CALL 'public constructor (x1: @[FlexibleNullability] X1 of .J1.?) declared in .J1' type=.J1 origin=null : @[FlexibleNullability] kotlin.Int? : @[FlexibleNullability] kotlin.Int? x1: CONST Int type=kotlin.Int value=1 @@ -22,7 +22,7 @@ FILE fqName: fileName:/javaConstructorWithTypeParameters.kt VALUE_PARAMETER name:j1 index:0 type:.J1 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test4 (j1: .J1): .J1.J2 declared in ' - CONSTRUCTOR_CALL 'public constructor (x2: X2 of .J1.J2.?) declared in .J1.J2' type=.J1.J2 origin=null + CONSTRUCTOR_CALL 'public constructor (x2: @[FlexibleNullability] X2 of .J1.J2.?) declared in .J1.J2' type=.J1.J2 origin=null : @[FlexibleNullability] kotlin.Int? : @[FlexibleNullability] kotlin.Int? $outer: GET_VAR 'j1: .J1 declared in .test4' type=.J1 origin=null diff --git a/compiler/testData/ir/irText/types/receiverOfIntersectionType.txt b/compiler/testData/ir/irText/types/receiverOfIntersectionType.txt index 5c4675cb678..3a9ffcfd3e9 100644 --- a/compiler/testData/ir/irText/types/receiverOfIntersectionType.txt +++ b/compiler/testData/ir/irText/types/receiverOfIntersectionType.txt @@ -137,12 +137,12 @@ FILE fqName: fileName:/receiverOfIntersectionType.kt WHEN type=@[FlexibleNullability] .K? origin=IF BRANCH if: CONST Boolean type=kotlin.Boolean value=true - then: CALL 'public open fun id (x: T of .Java.id?): T of .Java.id? declared in .Java' type=@[FlexibleNullability] .A? origin=null + then: CALL 'public open fun id (x: @[FlexibleNullability] T of .Java.id?): @[FlexibleNullability] T of .Java.id? declared in .Java' type=@[FlexibleNullability] .A? origin=null : @[FlexibleNullability] .A? x: GET_VAR 'a: .A declared in .testFlexible2' type=.A origin=null BRANCH if: CONST Boolean type=kotlin.Boolean value=true - then: CALL 'public open fun id (x: T of .Java.id?): T of .Java.id? declared in .Java' type=@[FlexibleNullability] .B? origin=null + then: CALL 'public open fun id (x: @[FlexibleNullability] T of .Java.id?): @[FlexibleNullability] T of .Java.id? declared in .Java' type=@[FlexibleNullability] .B? origin=null : @[FlexibleNullability] .B? x: GET_VAR 'b: .B declared in .testFlexible2' type=.B origin=null CALL 'public abstract fun ff (): kotlin.Unit declared in .I' type=kotlin.Unit origin=null diff --git a/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.txt b/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.txt index c5facaabdea..0cd33edcd68 100644 --- a/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.txt +++ b/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.txt @@ -9,7 +9,7 @@ FILE fqName: fileName:/smartCastOnFieldReceiverOfGenericType.kt TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit TYPE_OP type=kotlin.String origin=CAST typeOperand=kotlin.String GET_VAR 'b: kotlin.Any declared in .testSetField' type=kotlin.Any origin=null - SET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:value type:T of .JCell? visibility:public' type=kotlin.Unit origin=EQ + SET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:value type:@[FlexibleNullability] T of .JCell? visibility:public' type=kotlin.Unit origin=EQ receiver: TYPE_OP type=.JCell origin=IMPLICIT_CAST typeOperand=.JCell GET_VAR 'a: kotlin.Any declared in .testSetField' type=kotlin.Any origin=null value: TYPE_OP type=kotlin.String origin=IMPLICIT_CAST typeOperand=kotlin.String @@ -22,6 +22,6 @@ FILE fqName: fileName:/smartCastOnFieldReceiverOfGenericType.kt GET_VAR 'a: kotlin.Any declared in .testGetField' type=kotlin.Any origin=null RETURN type=kotlin.Nothing from='public final fun testGetField (a: kotlin.Any): kotlin.String declared in ' TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:value type:T of .JCell? visibility:public' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY + GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:value type:@[FlexibleNullability] T of .JCell? visibility:public' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY receiver: TYPE_OP type=.JCell origin=IMPLICIT_CAST typeOperand=.JCell GET_VAR 'a: kotlin.Any declared in .testGetField' type=kotlin.Any origin=null diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt index eb4e0d1937b..239026f01b5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt @@ -26,13 +26,12 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner import org.jetbrains.kotlin.types.refinement.TypeRefinement import org.jetbrains.kotlin.types.typeUtil.builtIns - fun KotlinType.isFlexible(): Boolean = unwrap() is FlexibleType fun KotlinType.asFlexibleType(): FlexibleType = unwrap() as FlexibleType fun KotlinType.isNullabilityFlexible(): Boolean { val flexibility = unwrap() as? FlexibleType ?: return false - return TypeUtils.isNullableType(flexibility.lowerBound) != TypeUtils.isNullableType(flexibility.upperBound) + return flexibility.lowerBound.isMarkedNullable != flexibility.upperBound.isMarkedNullable } // This function is intended primarily for sets: since KotlinType.equals() represents _syntactical_ equality of types,