Fix inaccurate report of DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM
It can be reported not only from within the enum, but also from top-level functions. Add separate diagnostic for such cases. ^KT-64488
This commit is contained in:
committed by
Space Team
parent
34d87465ac
commit
02b5fed389
+6
@@ -5019,6 +5019,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY) { firDiagnostic ->
|
||||
DeprecatedAccessToEntriesPropertyImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE) { firDiagnostic ->
|
||||
DeprecatedAccessToEnumEntryPropertyAsReferenceImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
+4
@@ -3494,6 +3494,10 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = DeprecatedAccessToEntryPropertyFromEnum::class
|
||||
}
|
||||
|
||||
interface DeprecatedAccessToEntriesProperty : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = DeprecatedAccessToEntriesProperty::class
|
||||
}
|
||||
|
||||
interface DeprecatedAccessToEnumEntryPropertyAsReference : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = DeprecatedAccessToEnumEntryPropertyAsReference::class
|
||||
}
|
||||
|
||||
+5
@@ -4214,6 +4214,11 @@ internal class DeprecatedAccessToEntryPropertyFromEnumImpl(
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.DeprecatedAccessToEntryPropertyFromEnum
|
||||
|
||||
internal class DeprecatedAccessToEntriesPropertyImpl(
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.DeprecatedAccessToEntriesProperty
|
||||
|
||||
internal class DeprecatedAccessToEnumEntryPropertyAsReferenceImpl(
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
|
||||
+1
@@ -1777,6 +1777,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val ENUM_ENTRIES_DEPRECATIONS by object : DiagnosticGroup("Enum.entries resolve deprecations") {
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY by warning<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning<PsiElement>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning<KtEnumEntry>()
|
||||
}
|
||||
|
||||
@@ -883,6 +883,7 @@ object FirErrors {
|
||||
// Enum.entries resolve deprecations
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY: KtDiagnosticFactory0 by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM: KtDiagnosticFactory0 by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY: KtDiagnosticFactory0 by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE: KtDiagnosticFactory0 by warning0<PsiElement>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY: KtDiagnosticFactory0 by warning0<KtEnumEntry>()
|
||||
|
||||
|
||||
+5
-1
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedPropertySymbol
|
||||
@@ -27,8 +29,10 @@ object FirCustomEnumEntriesMigrationAccessChecker : FirPropertyAccessExpressionC
|
||||
// This 'if' is needed just to choose one of two diagnostics
|
||||
if (expression.dispatchReceiver is FirResolvedQualifier || expression.extensionReceiver is FirResolvedQualifier) {
|
||||
reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY, context)
|
||||
} else {
|
||||
} else if (context.containingDeclarations.any { it is FirClass && it.isEnumClass }) {
|
||||
reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM, context)
|
||||
} else {
|
||||
reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -190,6 +190,7 @@ 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_ENTRIES_PROPERTY
|
||||
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
|
||||
@@ -2586,6 +2587,10 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
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_ENTRIES_PROPERTY,
|
||||
"Ambiguous access to the 'entries' property is deprecated. In the future, it will be shadowed by enum 'entries' property. Please resolve the ambiguity (e.g. by adding 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."
|
||||
|
||||
+1
-1
@@ -7,5 +7,5 @@ enum class MyEnum
|
||||
val entries = "local str"
|
||||
|
||||
fun test() {
|
||||
<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>
|
||||
<!DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY!>entries<!>
|
||||
}
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ context(Bar)
|
||||
fun test3() = z
|
||||
|
||||
context(Bar)
|
||||
fun test4() = <!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>
|
||||
fun test4() = <!DEPRECATED_ACCESS_TO_ENTRIES_PROPERTY!>entries<!>
|
||||
|
||||
context(Bar)
|
||||
fun Baz.test5() = w
|
||||
|
||||
Reference in New Issue
Block a user