From d028f9ec95c5b1224aeaca7b2050e32f9441e9d7 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 23 Aug 2023 17:16:04 +0200 Subject: [PATCH] K2: add stubs for enum entries deprecation diagnostics (KT-59344) --- .../diagnostics/KtFirDataClassConverters.kt | 24 +++++++++++++++++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 16 +++++++++++++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 20 ++++++++++++++++ .../diagnostics/FirDiagnosticsList.kt | 7 ++++++ .../fir/analysis/diagnostics/FirErrors.kt | 6 +++++ .../diagnostics/FirErrorsDefaultMessages.kt | 22 +++++++++++++++++ 6 files changed, 95 insertions(+) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 223427ad8f3..874aac50332 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -4785,6 +4785,30 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY) { firDiagnostic -> + DeprecatedAccessToEnumEntryCompanionPropertyImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } + add(FirErrors.DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM) { firDiagnostic -> + DeprecatedAccessToEntryPropertyFromEnumImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } + add(FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE) { firDiagnostic -> + DeprecatedAccessToEnumEntryPropertyAsReferenceImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } + add(FirErrors.DEPRECATED_DECLARATION_OF_ENUM_ENTRY) { firDiagnostic -> + DeprecatedDeclarationOfEnumEntryImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirJvmErrors.CONFLICTING_JVM_DECLARATIONS) { firDiagnostic -> ConflictingJvmDeclarationsImpl( firDiagnostic as KtPsiDiagnostic, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 64682fe7d4e..a1777c0b831 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -3338,6 +3338,22 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = RedundantLabelWarning::class } + interface DeprecatedAccessToEnumEntryCompanionProperty : KtFirDiagnostic { + override val diagnosticClass get() = DeprecatedAccessToEnumEntryCompanionProperty::class + } + + interface DeprecatedAccessToEntryPropertyFromEnum : KtFirDiagnostic { + override val diagnosticClass get() = DeprecatedAccessToEntryPropertyFromEnum::class + } + + interface DeprecatedAccessToEnumEntryPropertyAsReference : KtFirDiagnostic { + override val diagnosticClass get() = DeprecatedAccessToEnumEntryPropertyAsReference::class + } + + interface DeprecatedDeclarationOfEnumEntry : KtFirDiagnostic { + override val diagnosticClass get() = DeprecatedDeclarationOfEnumEntry::class + } + interface ConflictingJvmDeclarations : KtFirDiagnostic { override val diagnosticClass get() = ConflictingJvmDeclarations::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 9816fac8c2e..605b8fec4e4 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -4028,6 +4028,26 @@ internal class RedundantLabelWarningImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.RedundantLabelWarning +internal class DeprecatedAccessToEnumEntryCompanionPropertyImpl( + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DeprecatedAccessToEnumEntryCompanionProperty + +internal class DeprecatedAccessToEntryPropertyFromEnumImpl( + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DeprecatedAccessToEntryPropertyFromEnum + +internal class DeprecatedAccessToEnumEntryPropertyAsReferenceImpl( + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DeprecatedAccessToEnumEntryPropertyAsReference + +internal class DeprecatedDeclarationOfEnumEntryImpl( + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DeprecatedDeclarationOfEnumEntry + internal class ConflictingJvmDeclarationsImpl( firDiagnostic: KtPsiDiagnostic, token: KtLifetimeToken, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 9278248b279..446240551cf 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -1699,6 +1699,13 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val LABEL by object : DiagnosticGroup("label") { val REDUNDANT_LABEL_WARNING by warning(PositioningStrategy.LABEL) } + + val ENUM_ENTRIES_DEPRECATIONS by object : DiagnosticGroup("Enum.entries resolve deprecations") { + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning() + val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning() + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning() + val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning() + } } private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = { diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index c6d1e612479..826daacacc0 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -845,6 +845,12 @@ object FirErrors { // label val REDUNDANT_LABEL_WARNING by warning0(SourceElementPositioningStrategies.LABEL) + // Enum.entries resolve deprecations + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning0() + val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning0() + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0() + val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning0() + init { RootDiagnosticRendererFactory.registerFactory(FirErrorsDefaultMessages) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 6fbd905ada0..3bc7957989c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -174,7 +174,11 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATE_USES_EXT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_IN_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_NOT_TO_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_SUPER_CALL_IN_ENUM_CONSTRUCTOR +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_BINARY_MOD +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_DECLARATION_OF_ENUM_ENTRY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_IDENTITY_EQUALS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER_CONTAINING_DECLARATION @@ -2431,6 +2435,24 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { "Label is redundant, because it cannot be referenced in a 'break', 'continue', or 'return' expression." ) + // Enum entries deprecations + map.put( + DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY, + "Ambiguous access to the enum companion's property 'entries' is deprecated. Please, add the explicit 'Companion' qualifier to the class name." + ) + map.put( + DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM, + "Ambiguous access to the 'entries' property from within the enum is deprecated. Please add the explicit qualifier to the call." + ) + map.put( + DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE, + "Ambiguous access to the 'entries' property is deprecated. Please specify the type of the referenced expression explicitly." + ) + map.put( + DEPRECATED_DECLARATION_OF_ENUM_ENTRY, + "Conflicting declarations: the enum entry 'entries' and the property 'Enum.entries' (KT-48872). Please rename the enum entry declaration." + ) + // Extended checkers group map.put(REDUNDANT_VISIBILITY_MODIFIER, "Redundant visibility modifier.") map.put(REDUNDANT_MODALITY_MODIFIER, "Redundant modality modifier.")