[FIR] Allow "missing from dependencies" severity names in opt-in usage checker
- KT-62397 occurs in the IDE because enum entry symbols from libraries are deserialized from stubs, which currently produce `FirFromMissingDependenciesNamedReference`. - During opt-in usage checks, the compiler only considered resolved references when getting the severity name, but we can just take the name from the `FirFromMissingDependenciesNamedReference`. ^KT-62397 fixed
This commit is contained in:
committed by
Space Team
parent
570d9dbb19
commit
fd1c885c5b
+9
-2
@@ -21,7 +21,8 @@ import org.jetbrains.kotlin.fir.declarations.utils.isData
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.nameOrSpecialName
|
import org.jetbrains.kotlin.fir.declarations.utils.nameOrSpecialName
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.references.resolved
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
@@ -273,7 +274,13 @@ object FirOptInUsageBaseChecker {
|
|||||||
?: return null
|
?: return null
|
||||||
|
|
||||||
val levelArgument = experimental.findArgumentByName(LEVEL) as? FirQualifiedAccessExpression
|
val levelArgument = experimental.findArgumentByName(LEVEL) as? FirQualifiedAccessExpression
|
||||||
val levelName = levelArgument?.calleeReference?.resolved?.name?.asString()
|
|
||||||
|
val levelName = when (val calleeReference = levelArgument?.calleeReference) {
|
||||||
|
is FirErrorNamedReference -> null
|
||||||
|
is FirNamedReference -> calleeReference.name.asString()
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
val severity = Experimentality.Severity.values().firstOrNull { it.name == levelName } ?: Experimentality.DEFAULT_SEVERITY
|
val severity = Experimentality.Severity.values().firstOrNull { it.name == levelName } ?: Experimentality.DEFAULT_SEVERITY
|
||||||
val message = (experimental.findArgumentByName(MESSAGE) as? FirConstExpression<*>)?.value as? String
|
val message = (experimental.findArgumentByName(MESSAGE) as? FirConstExpression<*>)?.value as? String
|
||||||
return Experimentality(symbol.classId, severity, message, annotatedOwnerClassName)
|
return Experimentality(symbol.classId, severity, message, annotatedOwnerClassName)
|
||||||
|
|||||||
Reference in New Issue
Block a user