From 081e0060063329fa6b4afa7f938aa5cefeed1e4d Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Fri, 21 Apr 2023 08:39:43 +0200 Subject: [PATCH] [Gradle] Test that nullability is correctly inferred in metadata compilation ^KT-56380 --- .../kotlin/gradle/HierarchicalMppIT.kt | 8 +++++++ .../a/build.gradle.kts | 8 +++++++ .../a/src/commonMain/kotlin/a/A.kt | 5 ++++ .../b/build.gradle.kts | 24 +++++++++++++++++++ .../b/src/commonMain/kotlin/a/A.kt | 13 ++++++++++ .../build.gradle.kts | 10 ++++++++ .../gradle.properties | 1 + .../settings.gradle.kts | 2 ++ 8 files changed, 71 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/src/commonMain/kotlin/a/A.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/src/commonMain/kotlin/a/A.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/settings.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt index 71034543d9f..c5a160b8b7e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt @@ -1183,6 +1183,14 @@ open class HierarchicalMppIT : KGPBaseTest() { } } + @GradleTest + @DisplayName("KT-56380: correct nullability inference in metadata compilations") + fun `test correct nullability inference in metadata compilation`(gradleVersion: GradleVersion) { + project("kt-56380_correct_nullability_inference", gradleVersion) { + build(":b:compileCommonMainKotlinMetadata") + } + } + private fun TestProject.testDependencyTransformations( subproject: String? = null, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/build.gradle.kts new file mode 100644 index 00000000000..75287ba49f4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("multiplatform") +} + +kotlin { + jvm() + linuxX64() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/src/commonMain/kotlin/a/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/src/commonMain/kotlin/a/A.kt new file mode 100644 index 00000000000..7f5227ce350 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/a/src/commonMain/kotlin/a/A.kt @@ -0,0 +1,5 @@ +package a + +class A( + val data: Any? +) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/build.gradle.kts new file mode 100644 index 00000000000..08b5b2744e0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/build.gradle.kts @@ -0,0 +1,24 @@ +import org.jetbrains.kotlin.gradle.dsl.KotlinCompile + +plugins { + kotlin("multiplatform") +} + +kotlin { + jvm() + linuxX64() + + sourceSets { + commonMain { + dependencies { + api(project(":a")) + } + } + } +} + +tasks.withType(KotlinCompile::class.java).configureEach { + kotlinOptions { + allWarningsAsErrors = true + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/src/commonMain/kotlin/a/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/src/commonMain/kotlin/a/A.kt new file mode 100644 index 00000000000..2b2f19ad57b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/b/src/commonMain/kotlin/a/A.kt @@ -0,0 +1,13 @@ +package b + +import a.A + +fun foo(response: A) { + if (response.data != null) { + doSomethingWithNonNullable(response.data!!) + } +} + +fun doSomethingWithNonNullable(data: Any) { + print(data) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/build.gradle.kts new file mode 100644 index 00000000000..448f4930cb0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + kotlin("multiplatform") apply false +} + +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/gradle.properties new file mode 100644 index 00000000000..a8518e0d1ea --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/gradle.properties @@ -0,0 +1 @@ +kotlin.mpp.enableCompatibilityMetadataVariant=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/settings.gradle.kts new file mode 100644 index 00000000000..a5925ffb8ac --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-56380_correct_nullability_inference/settings.gradle.kts @@ -0,0 +1,2 @@ +include(":a") +include(":b") \ No newline at end of file