diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractFunctionOrPropertyCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractFunctionOrPropertyCommonizer.kt index 34b5b2ac9ee..ef5744fd2d7 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractFunctionOrPropertyCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractFunctionOrPropertyCommonizer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.commonizer.core import org.jetbrains.kotlin.commonizer.cir.CirFunctionOrProperty import org.jetbrains.kotlin.commonizer.cir.CirName +import org.jetbrains.kotlin.commonizer.cir.CirProperty import org.jetbrains.kotlin.commonizer.cir.CirType import org.jetbrains.kotlin.commonizer.core.TypeCommonizer.Options.Companion.default import org.jetbrains.kotlin.commonizer.mergedtree.CirKnownClassifiers @@ -47,7 +48,8 @@ private class ReturnTypeCommonizer( override fun invoke(values: List): CirType? { if (values.isEmpty()) return null val isTopLevel = values.all { it.containingClass == null } - return TypeCommonizer(classifiers, default.withCovariantNullabilityCommonizationEnabled(isTopLevel)) + val isCovariant = values.none { it is CirProperty && it.isVar } + return TypeCommonizer(classifiers, default.withCovariantNullabilityCommonizationEnabled(isTopLevel && isCovariant)) .asCommonizer().commonize(values.map { it.returnType }) } } diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/ReturnTypeNullabilityCommonizationTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/ReturnTypeNullabilityCommonizationTest.kt index 3ca87708ec9..951979c4904 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/ReturnTypeNullabilityCommonizationTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/ReturnTypeNullabilityCommonizationTest.kt @@ -63,14 +63,33 @@ class ReturnTypeNullabilityCommonizationTest : AbstractInlineSourcesCommonizatio fun `test nullable and non-nullable - property`() { val result = commonize { outputTarget("(a, b)") - simpleSingleSourceTarget("a", "val x: Any? = Unit?") + simpleSingleSourceTarget("a", "val x: Any? = null") simpleSingleSourceTarget("b", "val x: Any = Unit") } result.assertCommonized("(a, b)", "expect val x: Any?") } + fun `test nullable and non-nullable - var - val property`() { + val result = commonize { + outputTarget("(a, b)") + simpleSingleSourceTarget("a", "var x: Any? = null") + simpleSingleSourceTarget("b", "val x: Any = Unit") + } + result.assertCommonized("(a, b)", "") + } + + fun `test nullable and non-nullable - var var property`() { + val result = commonize { + outputTarget("(a, b)") + simpleSingleSourceTarget("a", "var x: Any? = null") + simpleSingleSourceTarget("b", "var x: Any = Unit") + } + + result.assertCommonized("(a, b)", "") + } + fun `test different nullability typealias - function`() { val result = commonize { outputTarget("(a, b)")