FIR: keep nullability when serializing suspend function types
No clue where to put the test for that since diagnostic tests, even
multi-module ones, never touch the metadata serializer. So the test is
a bytecode text one pretending to be about nullability annotations even
though it also affects what resolution in another module will do.
diff --git a/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.kt b/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.kt
new file mode 100644
index 0000000..5c52b2e
--- /dev/null
+++ b/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.kt
@@ -0,0 +1,11 @@
+// MODULE: lib
+// FILE: 1.kt
+interface I {
+ fun foo(x: (suspend () -> Unit)?): (suspend () -> Unit)?
+}
+
+// MODULE: main(lib)
+// FILE: 2.kt
+class C : I {
+ override fun foo(x: (suspend () -> Unit)?) = x
+}
diff --git a/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.txt b/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.txt
new file mode 100644
index 0000000..4a6ff11
--- /dev/null
+++ b/compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.txt
@@ -0,0 +1,13 @@
+Module: lib
+@kotlin.Metadata
+public interface I {
+ // source: '1.kt'
+ public abstract @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.Nullable p0: kotlin.jvm.functions.Function1): kotlin.jvm.functions.Function1
+}
+Module: main
+@kotlin.Metadata
+public final class C {
+ // source: '2.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.Nullable method foo(@org.jetbrains.annotations.Nullable p0: kotlin.jvm.functions.Function1): kotlin.jvm.functions.Function1
+}
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/Fir2IrSpecificBytecodeListingTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/Fir2IrSpecificBytecodeListingTestGenerated.java
index 49f21eb..fa72377 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/Fir2IrSpecificBytecodeListingTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/Fir2IrSpecificBytecodeListingTestGenerated.java
@@ -26,6 +26,22 @@
}
@Nested
+ @TestMetadata("compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations")
+ @TestDataPath("$PROJECT_ROOT")
+ public class NullabilityAnnotations {
+ @Test
+ public void testAllFilesPresentInNullabilityAnnotations() throws Exception {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
+ }
+
+ @Test
+ @TestMetadata("suspendFunction.kt")
+ public void testSuspendFunction() throws Exception {
+ runTest("compiler/fir/fir2ir/testData/codegen/bytecodeListing/nullabilityAnnotations/suspendFunction.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/fir2ir/testData/codegen/bytecodeListing/properties")
@TestDataPath("$PROJECT_ROOT")
public class Properties {
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt
index 5de539a..850091b 100644
--- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt
+++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt
@@ -127,7 +127,7 @@
arrayOf(lastTypeArgument),
isNullable = false
) + lastTypeArgument).toTypedArray(),
- isNullable = false,
+ isNullable = fullyExpandedType.isNullable,
attributes = fullyExpandedType.attributes
)
}