From 31f21d859303da8a20c4a8d534569654756684f6 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Tue, 1 Aug 2023 10:04:57 +0200 Subject: [PATCH] [IR] Fix IR expect-actual annotations checker in case when annotation is actual typealias ^KT-60830 Fixed --- ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ ...endMPPDiagnosticsWithPsiTestGenerated.java | 6 ++++++ .../IrExpectActualMatchingContext.kt | 7 ++++--- .../withAnnotationActualTypealias.kt | 21 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 5 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java index 2a5d6cd78ad..d92a54d958c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java @@ -334,6 +334,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/typealiasToKtLibrary.kt"); } + @Test + @TestMetadata("withAnnotationActualTypealias.kt") + public void testWithAnnotationActualTypealias() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt"); + } + @Test @TestMetadata("withOtherIncomatibilities.kt") public void testWithOtherIncomatibilities() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java index f5ea04fbf14..95bced7561c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java @@ -334,6 +334,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/typealiasToKtLibrary.kt"); } + @Test + @TestMetadata("withAnnotationActualTypealias.kt") + public void testWithAnnotationActualTypealias() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt"); + } + @Test @TestMetadata("withOtherIncomatibilities.kt") public void testWithOtherIncomatibilities() throws Exception { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrExpectActualMatchingContext.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrExpectActualMatchingContext.kt index 7ede47d26e6..04b4391f217 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrExpectActualMatchingContext.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/IrExpectActualMatchingContext.kt @@ -471,9 +471,9 @@ internal abstract class IrExpectActualMatchingContext( return expectToActualClassMap[classId]?.classId ?: classId } - private class AnnotationCallInfoImpl(val irElement: IrConstructorCall) : AnnotationCallInfo { + private inner class AnnotationCallInfoImpl(val irElement: IrConstructorCall) : AnnotationCallInfo { override val classId: ClassId? - get() = irElement.type.getClass()?.classId + get() = getAnnotationClass()?.classId override val isRetentionSource: Boolean get() = getAnnotationClass()?.getAnnotationRetention() == KotlinRetention.SOURCE @@ -482,7 +482,8 @@ internal abstract class IrExpectActualMatchingContext( get() = getAnnotationClass()?.hasAnnotation(OptInNames.REQUIRES_OPT_IN_FQ_NAME) ?: false private fun getAnnotationClass(): IrClass? { - return irElement.symbol.owner.parent as? IrClass + val annotationClass = irElement.type.getClass() ?: return null + return expectToActualClassMap[annotationClass.classId]?.owner ?: annotationClass } } diff --git a/compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt b/compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt new file mode 100644 index 00000000000..13718938bb3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt @@ -0,0 +1,21 @@ +// FIR_IDENTICAL +// MODULE: m1-common +// FILE: common.kt +expect annotation class Ann() + +@Ann +expect class MatchUseSameName + +@Ann +expect class MatchUseTypealiasedName + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt +annotation class AnnImpl +actual typealias Ann = AnnImpl + +@Ann +actual class MatchUseSameName + +@AnnImpl +actual class MatchUseTypealiasedName diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 8942f94d626..be781041429 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -22977,6 +22977,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/typealiasToKtLibrary.kt"); } + @Test + @TestMetadata("withAnnotationActualTypealias.kt") + public void testWithAnnotationActualTypealias() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/withAnnotationActualTypealias.kt"); + } + @Test @TestMetadata("withOtherIncomatibilities.kt") public void testWithOtherIncomatibilities() throws Exception {