From 3c73331821eae778900b8056662a632cd023829f Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Tue, 5 Sep 2023 18:15:37 +0200 Subject: [PATCH] KMP: Put "prohibit actual typealias to special annotations" under the flag ^KT-61668 Fixed Review: https://jetbrains.team/p/kt/reviews/12062/timeline --- ...ntendMPPDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ ...OldFrontendMPPDiagnosticsWithPsiTestGenerated.java | 6 ++++++ .../FirActualTypealiasToSpecialAnnotationChecker.kt | 2 ++ .../ActualTypealiasToSpecialAnnotationChecker.kt | 2 ++ ...TypealiasToSpecialAnnotation_oldLanguageVersion.kt | 11 +++++++++++ .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ 6 files changed, 33 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.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 d52b450614f..056f0f4dcc7 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 @@ -74,6 +74,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation.kt"); } + @Test + @TestMetadata("actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt") + public void testActualTypealiasToSpecialAnnotation_oldLanguageVersion() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt"); + } + @Test @TestMetadata("actualTypealias_defaultParamsIncompatibility.kt") public void testActualTypealias_defaultParamsIncompatibility() 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 0809793ffc2..cffb4ddc491 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 @@ -74,6 +74,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation.kt"); } + @Test + @TestMetadata("actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt") + public void testActualTypealiasToSpecialAnnotation_oldLanguageVersion() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt"); + } + @Test @TestMetadata("actualTypealias_defaultParamsIncompatibility.kt") public void testActualTypealias_defaultParamsIncompatibility() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirActualTypealiasToSpecialAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirActualTypealiasToSpecialAnnotationChecker.kt index e6b2f879188..ac432fbf493 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirActualTypealiasToSpecialAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirActualTypealiasToSpecialAnnotationChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn @@ -19,6 +20,7 @@ import org.jetbrains.kotlin.resolve.calls.mpp.ActualTypealiasToSpecialAnnotation internal object FirActualTypealiasToSpecialAnnotationChecker : FirTypeAliasChecker() { override fun check(declaration: FirTypeAlias, context: CheckerContext, reporter: DiagnosticReporter) { + if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiplatformRestrictions)) return if (!declaration.isActual) return val typealiasedClassSymbol = declaration.expandedConeType?.toSymbol(context.session) ?: return if (typealiasedClassSymbol.classKind != ClassKind.ANNOTATION_CLASS) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ActualTypealiasToSpecialAnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ActualTypealiasToSpecialAnnotationChecker.kt index 4dc3f6afb77..598b8d46058 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ActualTypealiasToSpecialAnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ActualTypealiasToSpecialAnnotationChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.resolve.checkers +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.classId internal object ActualTypealiasToSpecialAnnotationChecker : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { + if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiplatformRestrictions)) return if (declaration !is KtTypeAlias || descriptor !is TypeAliasDescriptor || !descriptor.isActual) { return } diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt new file mode 100644 index 00000000000..6e92b45020a --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt @@ -0,0 +1,11 @@ +// LANGUAGE: -MultiplatformRestrictions +// FIR_IDENTICAL +// WITH_STDLIB +// MODULE: m1-common +// FILE: common.kt +expect annotation class TypealiasToKotlinPkg + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt +actual typealias TypealiasToKotlinPkg = kotlin.Deprecated + 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 9f678c1dddb..4303b5779c4 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 @@ -23069,6 +23069,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation.kt"); } + @Test + @TestMetadata("actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt") + public void testActualTypealiasToSpecialAnnotation_oldLanguageVersion() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/actualTypealiasToSpecialAnnotation_oldLanguageVersion.kt"); + } + @Test @TestMetadata("actualTypealias_defaultParamsIncompatibility.kt") public void testActualTypealias_defaultParamsIncompatibility() throws Exception {