From f5b107d4f03697997fa8c7ba16d5db9e904c9e41 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Tue, 19 Sep 2023 17:52:27 +0200 Subject: [PATCH] [Commonizer] ClassCommonizer: Support annotation commonization ^KT-62028 Verification Pending --- .../kotlin/commonizer/core/ClassCommonizer.kt | 4 +- .../HierarchicalClassCommonizationTest.kt | 68 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) 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 3683c504bae..b42e3076b4d 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt @@ -23,10 +23,11 @@ class ClassCommonizer internal constructor( private val typeParameterListCommonizer: TypeParameterListCommonizer = TypeParameterListCommonizer(typeCommonizer) private val modalityCommonizer: ModalityCommonizer = ModalityCommonizer() private val visibilityCommonizer: VisibilityCommonizer = VisibilityCommonizer.equalizing() + private val annotationCommonizer = AnnotationsCommonizer.asCommonizer() override fun commonizationResult(): CirClass? { return CirClass.create( - annotations = emptyList(), + annotations = annotationCommonizer.result, name = name, typeParameters = typeParameterListCommonizer.result ?: return null, supertypes = supertypesCommonizer.result, @@ -62,5 +63,6 @@ class ClassCommonizer internal constructor( && visibilityCommonizer.commonizeWith(next) && typeParameterListCommonizer.commonizeWith(next.typeParameters) && supertypesCommonizer.commonizeWith(next.supertypes) + && annotationCommonizer.commonizeWith(next.annotations) } } diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassCommonizationTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassCommonizationTest.kt index 9ef93035a6e..cf00a03a1a0 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassCommonizationTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassCommonizationTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.commonizer.hierarchical import org.jetbrains.kotlin.commonizer.AbstractInlineSourcesCommonizationTest import org.jetbrains.kotlin.commonizer.assertCommonized + class HierarchicalClassCommonizationTest : AbstractInlineSourcesCommonizationTest() { fun `test simple class`() { @@ -96,4 +97,71 @@ class HierarchicalClassCommonizationTest : AbstractInlineSourcesCommonizationTes """ ) } + + fun `test annotations on class and interface`() { + val result = commonize { + outputTarget("(a, b)", "(a, b, c)") + registerDependency("a", "b", "c", "(a, b)", "(a, b, c)") { + source( + """ + annotation class A1 + annotation class A2 + annotation class A3 + """.trimIndent() + ) + } + + simpleSingleSourceTarget( + "a", """ + @A1 @A2 @A3 + class MyClass + + @A1 @A2 @A3 + interface MyInterface + """.trimIndent() + ) + + simpleSingleSourceTarget( + "b", """ + @A1 @A2 + class MyClass + + @A1 @A2 + interface MyInterface + + """.trimIndent() + ) + + simpleSingleSourceTarget( + "c", """ + @A1 + class MyClass + + @A1 + interface MyInterface + """.trimIndent() + ) + } + + result.assertCommonized( + "(a, b)", """ + @A1 @A2 + expect class MyClass() + + @A1 @A2 + expect interface MyInterface + + """.trimIndent() + ) + + result.assertCommonized( + "(a, b, c)", """ + @A1 + expect class MyClass() + + @A1 + expect interface MyInterface + """.trimIndent() + ) + } }