From e0d68fc93e75e7832616d15c3df6b4ebb50a92cb Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 23 Aug 2023 17:27:33 +0200 Subject: [PATCH] K2: introduce FirEnumEntriesRedeclarationChecker (KT-59344) --- .../checkers/CommonDeclarationCheckers.kt | 5 +++++ .../FirEnumEntriesRedeclarationChecker.kt | 21 +++++++++++++++++++ .../enum/entries/enumEntriesAmbiguity.fir.kt | 9 -------- .../enum/entries/enumEntriesAmbiguity.fir.txt | 2 +- .../enum/entries/enumEntriesAmbiguity.kt | 1 + ...ationOfEnumEntriesNameWithIntrinsic.fir.kt | 11 ---------- ...clarationOfEnumEntriesNameWithIntrinsic.kt | 1 + ...ionOfEnumEntriesNameWithIntrinsicOn.fir.kt | 12 ----------- ...onOfEnumEntriesNameWithIntrinsicOn.fir.txt | 2 +- ...arationOfEnumEntriesNameWithIntrinsicOn.kt | 1 + 10 files changed, 31 insertions(+), 34 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirEnumEntriesRedeclarationChecker.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index 60516cc6fcb..fbfaf27d41b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -188,4 +188,9 @@ object CommonDeclarationCheckers : DeclarationCheckers() { get() = setOf( FirValueParameterDefaultValueTypeMismatchChecker, ) + + override val enumEntryCheckers: Set + get() = setOf( + FirEnumEntriesRedeclarationChecker, + ) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirEnumEntriesRedeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirEnumEntriesRedeclarationChecker.kt new file mode 100644 index 00000000000..08acc0537ac --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirEnumEntriesRedeclarationChecker.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.checkers.declaration + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.declarations.FirEnumEntry + +object FirEnumEntriesRedeclarationChecker : FirEnumEntryChecker() { + override fun check(declaration: FirEnumEntry, context: CheckerContext, reporter: DiagnosticReporter) { + if (declaration.name == StandardNames.ENUM_ENTRIES) { + reporter.reportOn(declaration.source, FirErrors.DEPRECATED_DECLARATION_OF_ENUM_ENTRY, context) + } + } +} diff --git a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.kt deleted file mode 100644 index 6d2e715959f..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries -// WITH_STDLIB -// FIR_DUMP - -enum class Ambiguous { - first, entries; -} - -val e = Ambiguous.entries.ordinal diff --git a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.txt b/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.txt index 726ce1ed5af..68975744286 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.txt +++ b/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.fir.txt @@ -1,4 +1,4 @@ -FILE: enumEntriesAmbiguity.fir.kt +FILE: enumEntriesAmbiguity.kt public final enum class Ambiguous : R|kotlin/Enum| { private constructor(): R|Ambiguous| { super|>() diff --git a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.kt b/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.kt index b65a60fca26..b583aef13cb 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/enumEntriesAmbiguity.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +EnumEntries -PrioritizedEnumEntries // WITH_STDLIB // FIR_DUMP diff --git a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.fir.kt deleted file mode 100644 index 4014ad1d4c4..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -// !LANGUAGE: -EnumEntries -// WITH_STDLIB - -enum class E { - entries, Entries; - - fun foo() { - entries - E.entries - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.kt b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.kt index e1a969ed55a..4fe7ca2a7e6 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsic.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: -EnumEntries // WITH_STDLIB diff --git a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt deleted file mode 100644 index ca999174acb..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt +++ /dev/null @@ -1,12 +0,0 @@ -// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries -// WITH_STDLIB -// FIR_DUMP - -enum class E { - entries, Entries; - - fun foo() { - entries.ordinal - E.entries.ordinal - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.txt b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.txt index 2e65af611f0..1b05805824b 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.txt +++ b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.txt @@ -1,4 +1,4 @@ -FILE: redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt +FILE: redeclarationOfEnumEntriesNameWithIntrinsicOn.kt public final enum class E : R|kotlin/Enum| { private constructor(): R|E| { super|>() diff --git a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt index 72180868216..5465d03d41c 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +EnumEntries -PrioritizedEnumEntries // WITH_STDLIB // FIR_DUMP