diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractListCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractListCommonizer.kt index 9b00be5be08..6d6a4dc926c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractListCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/AbstractListCommonizer.kt @@ -15,14 +15,14 @@ import org.jetbrains.kotlin.commonizer.cir.CirType * Input: N lists of [CirType] * Output: list of [CirType] */ -abstract class AbstractListCommonizer( +abstract class AbstractListCommonizer( private val singleElementCommonizerFactory: (Int) -> Commonizer -) : Commonizer, List> { +) : Commonizer, List?> { private var commonizers: Array>? = null private var error = false - final override val result: List - get() = checkState(commonizers, error).mapNotNull { it.result } + final override val result: List? + get() = checkState(commonizers, error).map { it.result ?: return null } final override fun commonizeWith(next: List): Boolean { if (error) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/CallableValueParametersCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/CallableValueParametersCommonizer.kt index da9a4280e93..e3227d74e73 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/CallableValueParametersCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/CallableValueParametersCommonizer.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.commonizer.utils.isObjCInteropCallableAnnotation class CallableValueParametersCommonizer( typeCommonizer: TypeCommonizer, -) : Commonizer { +) : Commonizer { class Result( val hasStableParameterNames: Boolean, val valueParameters: List, @@ -121,7 +121,7 @@ class CallableValueParametersCommonizer( private var valueParameterNames: ValueParameterNames? = null private var error = false - override val result: Result + override val result: Result? get() { // don't inline `patchCallables` property; // valueParameters.overwriteNames() should be called strongly before valueParameters.result @@ -141,7 +141,7 @@ class CallableValueParametersCommonizer( return Result( hasStableParameterNames = hasStableParameterNames, - valueParameters = valueParameters.result, + valueParameters = valueParameters.result ?: return null, patchCallables = patchCallables ) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt index 72110a84b11..706f25d2a9d 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind class ClassCommonizer internal constructor( typeCommonizer: TypeCommonizer, supertypesCommonizer: ClassSuperTypeCommonizer -) : AbstractStandardCommonizer() { +) : AbstractStandardCommonizer() { private lateinit var name: CirName private lateinit var kind: ClassKind private var isInner = false @@ -23,21 +23,23 @@ class ClassCommonizer internal constructor( private val modalityCommonizer: ModalityCommonizer = ModalityCommonizer() private val visibilityCommonizer: VisibilityCommonizer = VisibilityCommonizer.equalizing() - override fun commonizationResult() = CirClass.create( - annotations = emptyList(), - name = name, - typeParameters = typeParameterListCommonizer.result, - supertypes = supertypesCommonizer.result, - visibility = visibilityCommonizer.result, - modality = modalityCommonizer.result, - kind = kind, - companion = null, - isCompanion = isCompanion, - isData = false, - isValue = isValue, - isInner = isInner, - isExternal = false - ) + override fun commonizationResult(): CirClass? { + return CirClass.create( + annotations = emptyList(), + name = name, + typeParameters = typeParameterListCommonizer.result ?: return null, + supertypes = supertypesCommonizer.result, + visibility = visibilityCommonizer.result, + modality = modalityCommonizer.result, + kind = kind, + companion = null, + isCompanion = isCompanion, + isData = false, + isValue = isValue, + isInner = isInner, + isExternal = false + ) + } override fun initialize(first: CirClass) { name = first.name diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassConstructorCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassConstructorCommonizer.kt index 468af68f8fd..5c98e6cd168 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassConstructorCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassConstructorCommonizer.kt @@ -12,20 +12,20 @@ import org.jetbrains.kotlin.descriptors.Modality class ClassConstructorCommonizer( typeCommonizer: TypeCommonizer, -) : AbstractStandardCommonizer() { +) : AbstractStandardCommonizer() { private var isPrimary = false private val visibility = VisibilityCommonizer.equalizing() private val typeParameterListCommonizer = TypeParameterListCommonizer(typeCommonizer) private val valueParametersCommonizer = CallableValueParametersCommonizer(typeCommonizer) private val annotationsCommonizer: AnnotationsCommonizer = AnnotationsCommonizer() - override fun commonizationResult(): CirClassConstructor { - val valueParameters = valueParametersCommonizer.result + override fun commonizationResult(): CirClassConstructor? { + val valueParameters = valueParametersCommonizer.result ?: return null valueParameters.patchCallables() return CirClassConstructor.create( annotations = annotationsCommonizer.result, - typeParameters = typeParameterListCommonizer.result, + typeParameters = typeParameterListCommonizer.result ?: return null, visibility = visibility.result, containingClass = CONTAINING_CLASS_DOES_NOT_MATTER, // does not matter valueParameters = valueParameters.valueParameters, diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizer.kt index a4245ed7aae..f79b51fa939 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizer.kt @@ -10,19 +10,21 @@ import org.jetbrains.kotlin.commonizer.cir.CirType import org.jetbrains.kotlin.commonizer.cir.CirTypeParameter import org.jetbrains.kotlin.types.Variance -class TypeParameterCommonizer(typeCommonizer: TypeCommonizer) : AbstractStandardCommonizer() { +class TypeParameterCommonizer(typeCommonizer: TypeCommonizer) : AbstractStandardCommonizer() { private lateinit var name: CirName private var isReified = false private lateinit var variance: Variance private val upperBounds = TypeParameterUpperBoundsCommonizer(typeCommonizer) - override fun commonizationResult() = CirTypeParameter( - annotations = emptyList(), - name = name, - isReified = isReified, - variance = variance, - upperBounds = upperBounds.result - ) + override fun commonizationResult(): CirTypeParameter? { + return CirTypeParameter( + annotations = emptyList(), + name = name, + isReified = isReified, + variance = variance, + upperBounds = upperBounds.result ?: return null + ) + } override fun initialize(first: CirTypeParameter) { name = first.name diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizerTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizerTest.kt index 08a23fbec53..6243b072b27 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizerTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterCommonizerTest.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.commonizer.utils.mockClassType import org.jetbrains.kotlin.types.Variance import org.junit.Test -class TypeParameterCommonizerTest : AbstractCommonizerTest() { +class TypeParameterCommonizerTest : AbstractCommonizerTest() { override fun createCommonizer() = TypeParameterCommonizer(TypeCommonizer(MOCK_CLASSIFIERS)) @Test diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterListCommonizerTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterListCommonizerTest.kt index 1818ebee761..8abd05a1c40 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterListCommonizerTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/TypeParameterListCommonizerTest.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.commonizer.cir.CirTypeParameter import org.jetbrains.kotlin.commonizer.utils.MOCK_CLASSIFIERS import org.junit.Test -class TypeParameterListCommonizerTest : AbstractCommonizerTest, List>() { +class TypeParameterListCommonizerTest : AbstractCommonizerTest, List?>() { @Test fun emptyValueParameters() = doTestSuccess( diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/ValueParameterListCommonizerTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/ValueParameterListCommonizerTest.kt index e31986f233f..0d7b81407e6 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/ValueParameterListCommonizerTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/core/ValueParameterListCommonizerTest.kt @@ -8,8 +8,9 @@ package org.jetbrains.kotlin.commonizer.core import org.jetbrains.kotlin.commonizer.cir.CirValueParameter import org.jetbrains.kotlin.commonizer.utils.MOCK_CLASSIFIERS import org.junit.Test +import kotlin.test.assertEquals -class ValueParameterListCommonizerTest : AbstractCommonizerTest, List>() { +class ValueParameterListCommonizerTest : AbstractCommonizerTest, List?>() { @Test fun emptyValueParameters() = doTestSuccess( @@ -130,24 +131,30 @@ class ValueParameterListCommonizerTest : AbstractCommonizerTest