[FIR] Fix reporting of UNINITIALIZED_ENUM_COMPANION in all places
This commit is contained in:
committed by
Space
parent
a2c12aa711
commit
09429ff432
+13
-12
@@ -16,7 +16,10 @@ import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.primaryConstructorIfAny
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.coneType
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull
|
||||
|
||||
@@ -57,21 +60,19 @@ object FirEnumCompanionInEnumConstructorCallChecker : FirEnumEntryChecker() {
|
||||
|
||||
|
||||
private fun checkQualifiedAccess(expression: FirQualifiedAccessExpression): Boolean {
|
||||
val extensionReceiver = expression.extensionReceiver
|
||||
if (extensionReceiver !is FirResolvedQualifier && extensionReceiver !is FirThisReceiverExpression) return true
|
||||
|
||||
val receiverSymbol = expression.toResolvedCallableSymbol()
|
||||
?.resolvedReceiverTypeRef
|
||||
?.toRegularClassSymbol(context.session)
|
||||
val companionReceiver = checkReceiver(expression.extensionReceiver)
|
||||
?: checkReceiver(expression.dispatchReceiver)
|
||||
?: return true
|
||||
|
||||
if (receiverSymbol == companionSymbol) {
|
||||
val source = expression.extensionReceiver.source ?: expression.source
|
||||
reporter.reportOn(source, FirErrors.UNINITIALIZED_ENUM_COMPANION, companionSymbol, context)
|
||||
return false
|
||||
}
|
||||
val source = companionReceiver.source ?: expression.source
|
||||
reporter.reportOn(source, FirErrors.UNINITIALIZED_ENUM_COMPANION, companionSymbol, context)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
private fun checkReceiver(receiverExpression: FirExpression): FirExpression? {
|
||||
if (receiverExpression !is FirResolvedQualifier && receiverExpression !is FirThisReceiverExpression) return null
|
||||
val receiverSymbol = receiverExpression.typeRef.coneType.toRegularClassSymbol(context.session) ?: return null
|
||||
return receiverExpression.takeIf { receiverSymbol == companionSymbol }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-23
@@ -155,29 +155,6 @@ object FirUninitializedEnumChecker : FirQualifiedAccessExpressionChecker() {
|
||||
// val score = ... <!>common<!>
|
||||
// }
|
||||
reporter.reportOn(source, FirErrors.UNINITIALIZED_VARIABLE, calleeSymbol, context)
|
||||
} else {
|
||||
// enum class EnumCompanion2(...) {
|
||||
// INSTANCE(<!>foo<!>())
|
||||
// companion object {
|
||||
// fun foo() = ...
|
||||
// }
|
||||
// }
|
||||
// <!>Companion<!>.foo() v.s. <!>foo<!>()
|
||||
if ((expression.explicitReceiver as? FirResolvedQualifier)?.symbol == enumClassSymbol.companionObjectSymbol) {
|
||||
reporter.reportOn(
|
||||
expression.explicitReceiver!!.source,
|
||||
FirErrors.UNINITIALIZED_ENUM_COMPANION,
|
||||
enumClassSymbol,
|
||||
context
|
||||
)
|
||||
} else {
|
||||
reporter.reportOn(
|
||||
expression.calleeReference.source,
|
||||
FirErrors.UNINITIALIZED_ENUM_COMPANION,
|
||||
enumClassSymbol,
|
||||
context
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -1,7 +1,7 @@
|
||||
// SKIP_TXT
|
||||
|
||||
enum class A(val z: Any) {
|
||||
Y(<!UNINITIALIZED_VARIABLE!>x<!>);
|
||||
Y(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>x<!>);
|
||||
|
||||
companion object {
|
||||
val x = A.Y.ordinal
|
||||
@@ -9,7 +9,7 @@ enum class A(val z: Any) {
|
||||
}
|
||||
|
||||
enum class B(val z: Any) {
|
||||
Y(<!UNINITIALIZED_VARIABLE!>B.x<!>);
|
||||
Y(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>B<!>.x<!>);
|
||||
|
||||
companion object {
|
||||
val x = B.Y.ordinal
|
||||
|
||||
Vendored
+1
-1
@@ -9,7 +9,7 @@ enum class B(val x: Int) {
|
||||
}
|
||||
|
||||
enum class C(val x: Int) {
|
||||
C1(<!UNINITIALIZED_VARIABLE!>SUM<!>),
|
||||
C1(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>SUM<!>),
|
||||
C2(1);
|
||||
|
||||
companion object {
|
||||
|
||||
Vendored
+8
-8
@@ -3,13 +3,13 @@
|
||||
|
||||
enum class SomeEnum(val x: Int) {
|
||||
A(<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),// UNINITIALIZED_ENUM_COMPANION
|
||||
B(<!UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
|
||||
C(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!>SomeEnum.companionProp<!>.length),
|
||||
C(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionFun().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp<!>.length),
|
||||
|
||||
E(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionFun().length),
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.Companion.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
|
||||
companion object {
|
||||
val companionProp = "someString"
|
||||
@@ -39,11 +39,11 @@ val OtherEnum.Companion.extensionProp: String
|
||||
|
||||
enum class EnumWithLambda(val lambda: () -> Unit) {
|
||||
M({
|
||||
companionFun().length
|
||||
companionProp.length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length
|
||||
|
||||
EnumWithLambda.companionFun().length
|
||||
EnumWithLambda.companionProp.length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionProp<!>.length
|
||||
|
||||
Vendored
+8
-8
@@ -3,13 +3,13 @@
|
||||
|
||||
enum class SomeEnum(val x: Int) {
|
||||
A(<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),// UNINITIALIZED_ENUM_COMPANION
|
||||
B(<!UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
|
||||
C(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!>SomeEnum.companionProp<!>.length),
|
||||
C(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionFun().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp<!>.length),
|
||||
|
||||
E(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionFun().length),
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.Companion.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
|
||||
companion object {
|
||||
val companionProp = "someString"
|
||||
@@ -39,11 +39,11 @@ val OtherEnum.Companion.extensionProp: String
|
||||
|
||||
enum class EnumWithLambda(val lambda: () -> Unit) {
|
||||
M({
|
||||
companionFun().length
|
||||
companionProp.length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length
|
||||
|
||||
EnumWithLambda.companionFun().length
|
||||
EnumWithLambda.companionProp.length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionProp<!>.length
|
||||
|
||||
Reference in New Issue
Block a user