diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassOrTypeAliasTypeCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassOrTypeAliasTypeCommonizer.kt index ed5d7d120f5..fa8db2be57d 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassOrTypeAliasTypeCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassOrTypeAliasTypeCommonizer.kt @@ -25,8 +25,8 @@ internal class ClassOrTypeAliasTypeCommonizer( typeCommonizer, classifiers, settings.getSetting(OptimisticNumberCommonizationEnabledKey) ) - private val isMarkedNullableCommonizer = TypeNullabilityCommonizer(typeCommonizer.options) - private val typeDistanceMeasurement = TypeDistanceMeasurement(typeCommonizer.options) + private val isMarkedNullableCommonizer = TypeNullabilityCommonizer(typeCommonizer.context) + private val typeDistanceMeasurement = TypeDistanceMeasurement(typeCommonizer.context) override fun invoke(values: List): CirClassOrTypeAliasType? { if (values.isEmpty()) return null @@ -203,8 +203,8 @@ internal class ClassOrTypeAliasTypeCommonizer( * - The input [types] do not have a single distinct set of associated ids */ private fun selectSubstitutionClassifierId(types: List): CirEntityId? { - val forwardSubstitutionAllowed = typeCommonizer.options.enableForwardTypeAliasSubstitution - val backwardsSubstitutionAllowed = typeCommonizer.options.enableBackwardsTypeAliasSubstitution + val forwardSubstitutionAllowed = typeCommonizer.context.enableForwardTypeAliasSubstitution + val backwardsSubstitutionAllowed = typeCommonizer.context.enableBackwardsTypeAliasSubstitution /* No substitution allowed in any direction */ if (!forwardSubstitutionAllowed && !backwardsSubstitutionAllowed) { @@ -268,7 +268,7 @@ private interface TypeDistanceMeasurement { } companion object { - operator fun invoke(options: TypeCommonizer.Options): TypeDistanceMeasurement = when { + operator fun invoke(options: TypeCommonizer.Context): TypeDistanceMeasurement = when { options.enableBackwardsTypeAliasSubstitution && options.enableForwardTypeAliasSubstitution -> Full options.enableForwardTypeAliasSubstitution -> ForwardOnly else -> None diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ReturnTypeCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ReturnTypeCommonizer.kt index d7c617db362..0156981a569 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ReturnTypeCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ReturnTypeCommonizer.kt @@ -17,7 +17,7 @@ class ReturnTypeCommonizer( val isTopLevel = values.all { it.containingClass == null } val isCovariant = values.none { it is CirProperty && it.isVar } return typeCommonizer - .withOptions { withCovariantNullabilityCommonizationEnabled(isTopLevel && isCovariant) } + .withContext { withCovariantNullabilityCommonizationEnabled(isTopLevel && isCovariant) } .invoke(values.map { it.returnType }) } } \ No newline at end of file diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasCommonizer.kt index 3bc358596ce..a4dfcf35387 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasCommonizer.kt @@ -19,7 +19,7 @@ class TypeAliasCommonizer( private val settings: CommonizerSettings, ) : NullableSingleInvocationCommonizer { - private val typeCommonizer = typeCommonizer.withOptions { + private val typeCommonizer = typeCommonizer.withContext { withBackwardsTypeAliasSubstitutionEnabled(false) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeCommonizer.kt index 338d2f83722..4e5406fc576 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeCommonizer.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.commonizer.utils.safeCastValues class TypeCommonizer( private val classifiers: CirKnownClassifiers, private val settings: CommonizerSettings, - val options: Options = Options.default, + val context: Context = Context.default, ) : NullableSingleInvocationCommonizer { private val classOrTypeAliasTypeCommonizer = ClassOrTypeAliasTypeCommonizer(this, classifiers, settings) @@ -35,43 +35,43 @@ class TypeCommonizer( return null } - data class Options( + data class Context( val enableCovariantNullabilityCommonization: Boolean = false, val enableForwardTypeAliasSubstitution: Boolean = true, val enableBackwardsTypeAliasSubstitution: Boolean = true, ) { - fun withCovariantNullabilityCommonizationEnabled(enabled: Boolean = true): Options { + fun withCovariantNullabilityCommonizationEnabled(enabled: Boolean = true): Context { return if (enableCovariantNullabilityCommonization == enabled) this else copy(enableCovariantNullabilityCommonization = enabled) } - fun withForwardTypeAliasSubstitutionEnabled(enabled: Boolean = true): Options { + fun withForwardTypeAliasSubstitutionEnabled(enabled: Boolean = true): Context { return if (enableForwardTypeAliasSubstitution == enabled) this else copy(enableForwardTypeAliasSubstitution = enabled) } - fun withBackwardsTypeAliasSubstitutionEnabled(enabled: Boolean = true): Options { + fun withBackwardsTypeAliasSubstitutionEnabled(enabled: Boolean = true): Context { return if (enableBackwardsTypeAliasSubstitution == enabled) this else copy(enableBackwardsTypeAliasSubstitution = enabled) } - fun withTypeAliasSubstitutionEnabled(enabled: Boolean = true): Options { + fun withTypeAliasSubstitutionEnabled(enabled: Boolean = true): Context { return withForwardTypeAliasSubstitutionEnabled(enabled).withBackwardsTypeAliasSubstitutionEnabled(enabled) } companion object { - val default = Options() + val default = Context() } } - fun withOptions(options: Options): TypeCommonizer { - return if (this.options == options) this - else TypeCommonizer(classifiers, settings, options) + fun withContext(context: Context): TypeCommonizer { + return if (this.context == context) this + else TypeCommonizer(classifiers, settings, context) } - inline fun withOptions(createNewOptions: Options.() -> Options): TypeCommonizer { - return withOptions(options.createNewOptions()) + inline fun withContext(createNewContext: Context.() -> Context): TypeCommonizer { + return withContext(context.createNewContext()) } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeNullabilityCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeNullabilityCommonizer.kt index 706364d79a2..ca9c976f038 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeNullabilityCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeNullabilityCommonizer.kt @@ -9,7 +9,7 @@ private typealias IsMarkedNullable = Boolean internal interface TypeNullabilityCommonizer : AssociativeCommonizer -internal fun TypeNullabilityCommonizer(options: TypeCommonizer.Options): TypeNullabilityCommonizer { +internal fun TypeNullabilityCommonizer(options: TypeCommonizer.Context): TypeNullabilityCommonizer { return if (options.enableCovariantNullabilityCommonization) CovariantTypeNullabilityCommonizer else EqualTypeNullabilityCommonizer }