diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 334731fb4da..d5d9d6903a5 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -35417,6 +35417,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/reflection/typeOf/classes.kt"); } + @Test + @TestMetadata("flexibleType.kt") + public void testFlexibleType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt"); + } + @Test @TestMetadata("inlineClasses.kt") public void testInlineClasses() throws Exception { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt index 900ae060e46..b572a619ecc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt @@ -77,6 +77,9 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon override fun SimpleTypeMarker.isMarkedNullable(): Boolean = (this as IrSimpleType).hasQuestionMark + override fun KotlinTypeMarker.isMarkedNullable(): Boolean = + this is IrSimpleType && !isWithFlexibleNullability() && hasQuestionMark + override fun SimpleTypeMarker.withNullability(nullable: Boolean): SimpleTypeMarker { val simpleType = this as IrSimpleType return if (simpleType.hasQuestionMark == nullable) simpleType diff --git a/compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt b/compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt new file mode 100644 index 00000000000..0c5831aee52 --- /dev/null +++ b/compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt @@ -0,0 +1,27 @@ +// !USE_EXPERIMENTAL: kotlin.ExperimentalStdlibApi +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_REFLECT +// FILE: box.kt + +package test + +import kotlin.reflect.* + +fun box(): String { + val v = returnTypeOf { J.get() }.toString() + if (v != "J") return "Fail: $v" + + return "OK" +} + +inline fun returnTypeOf(block: () -> T) = + typeOf() + +// FILE: J.java + +public class J { + public static J get() { + return null; + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index c33a85383c9..a63e361300f 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -35417,6 +35417,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/reflection/typeOf/classes.kt"); } + @Test + @TestMetadata("flexibleType.kt") + public void testFlexibleType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt"); + } + @Test @TestMetadata("inlineClasses.kt") public void testInlineClasses() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 5868bc5ebc8..ed7f37b9f4f 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -35417,6 +35417,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/reflection/typeOf/classes.kt"); } + @Test + @TestMetadata("flexibleType.kt") + public void testFlexibleType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt"); + } + @Test @TestMetadata("inlineClasses.kt") public void testInlineClasses() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index cdaebd624d9..be628907911 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -28146,6 +28146,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/reflection/typeOf/classes.kt"); } + @TestMetadata("flexibleType.kt") + public void testFlexibleType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/typeOf/flexibleType.kt"); + } + @TestMetadata("inlineClasses.kt") public void testInlineClasses() throws Exception { runTest("compiler/testData/codegen/box/reflection/typeOf/inlineClasses.kt");