diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt index 5180f86637b..530d989d007 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt @@ -45,6 +45,7 @@ class TypeAliasCommonizer(cache: CirClassifiersCache) : AbstractStandardCommoniz private class TypeAliasShortCircuitingCommonizer(cache: CirClassifiersCache) : AbstractStandardCommonizer() { private lateinit var name: Name + private val typeParameters = TypeParameterListCommonizer(cache) private val expandedType = TypeCommonizer(cache) private val visibility = VisibilityCommonizer.lowering() @@ -54,7 +55,7 @@ private class TypeAliasShortCircuitingCommonizer(cache: CirClassifiersCache) : A return CirTypeAliasFactory.create( annotations = emptyList(), name = name, - typeParameters = emptyList(), + typeParameters = typeParameters.result, visibility = visibility.result, underlyingType = expandedType, // pass expanded type as underlying type expandedType = expandedType @@ -69,8 +70,7 @@ private class TypeAliasShortCircuitingCommonizer(cache: CirClassifiersCache) : A } override fun doCommonizeWith(next: CirTypeAlias) = - next.typeParameters.isEmpty() // short-circuiting of TAs with type parameters is too complex case, consider implementing it later - && next.expandedType.arguments.isEmpty() // short-circuiting of TAs with type arguments in expanded type is too complex case + typeParameters.commonizeWith(next.typeParameters) && expandedType.commonizeWith(next.expandedType) && visibility.commonizeWith(next) } diff --git a/native/commonizer/testData/classifierCommonization/typeAliases/commonized/common/package_root.kt b/native/commonizer/testData/classifierCommonization/typeAliases/commonized/common/package_root.kt index e2b24c5e726..c953d2dfc19 100644 --- a/native/commonizer/testData/classifierCommonization/typeAliases/commonized/common/package_root.kt +++ b/native/commonizer/testData/classifierCommonization/typeAliases/commonized/common/package_root.kt @@ -12,6 +12,17 @@ typealias E = A // different TAs expanded to the same class at the RHS typealias F = List // parameterized type at the RHS typealias H = List // TA with own parameters +typealias I2 = List +typealias I3 = List +typealias I4 = List + +typealias I5 = Map +typealias I6 = Map + +typealias I7 = Map +typealias I8 = Map +typealias I9 = Map + typealias J = Function // function type at the RHS typealias M = () -> Unit // same return type typealias O = (String) -> Int // same argument type diff --git a/native/commonizer/testData/classifierCommonization/typeAliases/original/linux/package_root.kt b/native/commonizer/testData/classifierCommonization/typeAliases/original/linux/package_root.kt index 0c59bf287db..a5d30fd3aa1 100644 --- a/native/commonizer/testData/classifierCommonization/typeAliases/original/linux/package_root.kt +++ b/native/commonizer/testData/classifierCommonization/typeAliases/original/linux/package_root.kt @@ -15,6 +15,17 @@ typealias G = List // different parameterized types at the RHS typealias H = List // TA with own parameters typealias I = List // TAs with own parameters with different names +typealias I2 = List +typealias I3 = I2 +typealias I4 = I2 + +typealias I5 = Map +typealias I6 = I5 + +typealias I7 = Map +typealias I8 = I7 +typealias I9 = I8 + typealias J = Function // function type at the RHS typealias K = Function // function types with different type parameter names typealias L = () -> T // different kinds of function types diff --git a/native/commonizer/testData/classifierCommonization/typeAliases/original/macos/package_root.kt b/native/commonizer/testData/classifierCommonization/typeAliases/original/macos/package_root.kt index af8ddc0560f..04963264a48 100644 --- a/native/commonizer/testData/classifierCommonization/typeAliases/original/macos/package_root.kt +++ b/native/commonizer/testData/classifierCommonization/typeAliases/original/macos/package_root.kt @@ -15,6 +15,17 @@ typealias G = List // different parameterized types at the RHS typealias H = List // TA with own parameters typealias I = List // TAs with own parameters with different names +typealias I2 = List +typealias I3 = I2 +typealias I4 = I2 + +typealias I5 = Map +typealias I6 = I5 + +typealias I7 = Map +typealias I8 = I7 +typealias I9 = I8 + typealias J = Function // function type at the RHS typealias K = Function // function types with different type parameter names typealias L = Function // different kinds of function types