[FIR] Add UNINITIALIZED_ENUM_ENTRY on access qualifier of local enum
^KT-59967 fixed
This commit is contained in:
committed by
Space Team
parent
1ccb085e68
commit
065733e87c
+8
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
|||||||
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
|
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
|
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.toResolvedBaseSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedBaseSymbol
|
||||||
import org.jetbrains.kotlin.fir.references.toResolvedNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedNamedFunctionSymbol
|
||||||
@@ -79,6 +81,12 @@ object FirUninitializedEnumChecker : FirQualifiedAccessExpressionChecker() {
|
|||||||
// We're looking for members/entries/companion object in an enum class or members in companion object of an enum class.
|
// We're looking for members/entries/companion object in an enum class or members in companion object of an enum class.
|
||||||
if (!enumClassSymbol.isEnumClass) return
|
if (!enumClassSymbol.isEnumClass) return
|
||||||
|
|
||||||
|
// Local enum class are prohibited
|
||||||
|
// So report error on access of local enum entry
|
||||||
|
if (enumClassSymbol.visibility == Visibilities.Local) {
|
||||||
|
reporter.reportOn(source, FirErrors.UNINITIALIZED_ENUM_ENTRY, calleeSymbol as FirEnumEntrySymbol, context)
|
||||||
|
}
|
||||||
|
|
||||||
// An accessed context within the enum class of interest. We should look up until either enum members or enum entries are found,
|
// An accessed context within the enum class of interest. We should look up until either enum members or enum entries are found,
|
||||||
// not just last containing declaration. For example,
|
// not just last containing declaration. For example,
|
||||||
// enum class Fruit(...) {
|
// enum class Fruit(...) {
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
|
||||||
|
|
||||||
fun foo() {
|
|
||||||
<!WRONG_MODIFIER_TARGET!>enum<!> class A {
|
|
||||||
FOO,
|
|
||||||
BAR
|
|
||||||
}
|
|
||||||
val foo = A.FOO
|
|
||||||
val b = object {
|
|
||||||
<!WRONG_MODIFIER_TARGET!>enum<!> class B {}
|
|
||||||
}
|
|
||||||
class C {
|
|
||||||
<!WRONG_MODIFIER_TARGET!>enum<!> class D {}
|
|
||||||
}
|
|
||||||
val f = {
|
|
||||||
<!WRONG_MODIFIER_TARGET!>enum<!> class E {}
|
|
||||||
}
|
|
||||||
|
|
||||||
<!WRONG_MODIFIER_TARGET!>enum<!> class<!SYNTAX!><!> {}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
|
|||||||
Reference in New Issue
Block a user