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