K2: introduce FirEnumEntriesRedeclarationChecker (KT-59344)

This commit is contained in:
Mikhail Glukhikh
2023-08-23 17:27:33 +02:00
committed by Space Team
parent d028f9ec95
commit e0d68fc93e
10 changed files with 31 additions and 34 deletions
@@ -188,4 +188,9 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
get() = setOf(
FirValueParameterDefaultValueTypeMismatchChecker,
)
override val enumEntryCheckers: Set<FirEnumEntryChecker>
get() = setOf(
FirEnumEntriesRedeclarationChecker,
)
}
@@ -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)
}
}
}
@@ -1,9 +0,0 @@
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
// WITH_STDLIB
// FIR_DUMP
enum class Ambiguous {
first, entries;
}
val e = Ambiguous.entries.ordinal
@@ -1,4 +1,4 @@
FILE: enumEntriesAmbiguity.fir.kt
FILE: enumEntriesAmbiguity.kt
public final enum class Ambiguous : R|kotlin/Enum<Ambiguous>| {
private constructor(): R|Ambiguous| {
super<R|kotlin/Enum<Ambiguous>|>()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
// WITH_STDLIB
// FIR_DUMP
@@ -1,11 +0,0 @@
// !LANGUAGE: -EnumEntries
// WITH_STDLIB
enum class E {
entries, Entries;
fun foo() {
entries
E.entries
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -EnumEntries
// WITH_STDLIB
@@ -1,12 +0,0 @@
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
// WITH_STDLIB
// FIR_DUMP
enum class E {
entries, Entries;
fun foo() {
entries.ordinal
E.entries.ordinal
}
}
@@ -1,4 +1,4 @@
FILE: redeclarationOfEnumEntriesNameWithIntrinsicOn.fir.kt
FILE: redeclarationOfEnumEntriesNameWithIntrinsicOn.kt
public final enum class E : R|kotlin/Enum<E>| {
private constructor(): R|E| {
super<R|kotlin/Enum<E>|>()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
// WITH_STDLIB
// FIR_DUMP