[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.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
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.declarations.*
|
||||
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.references.toResolvedBaseSymbol
|
||||
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.
|
||||
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,
|
||||
// not just last containing declaration. For example,
|
||||
// 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
|
||||
|
||||
fun foo() {
|
||||
|
||||
Reference in New Issue
Block a user