[K2] OPT_IN_USAGE_ERROR is absent when calling the enum primary constructor
^KT-63459
This commit is contained in:
committed by
Space Team
parent
c6d391c632
commit
97ef2de6e3
+26
-19
@@ -11,12 +11,11 @@ import org.jetbrains.kotlin.fakeElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isLhsOfAssignment
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
||||
import org.jetbrains.kotlin.fir.expressions.calleeReference
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isFromEnumClass
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedBaseSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||
import org.jetbrains.kotlin.fir.types.resolvedType
|
||||
|
||||
object FirOptInUsageAccessChecker : FirBasicExpressionChecker() {
|
||||
@@ -31,22 +30,30 @@ object FirOptInUsageAccessChecker : FirBasicExpressionChecker() {
|
||||
val resolvedSymbol = expression.calleeReference?.toResolvedBaseSymbol() ?: return
|
||||
|
||||
with(FirOptInUsageBaseChecker) {
|
||||
if (expression is FirVariableAssignment) {
|
||||
val experimentalities = resolvedSymbol.loadExperimentalities(context, fromSetter = true, null) +
|
||||
loadExperimentalitiesFromTypeArguments(context, emptyList())
|
||||
reportNotAcceptedExperimentalities(experimentalities, expression.lValue, context, reporter)
|
||||
} else if (expression is FirQualifiedAccessExpression) {
|
||||
val dispatchReceiverType = expression.dispatchReceiver?.resolvedType?.fullyExpandedType(context.session)
|
||||
|
||||
val experimentalities = resolvedSymbol.loadExperimentalities(context, fromSetter = false, dispatchReceiverType) +
|
||||
loadExperimentalitiesFromTypeArguments(context, expression.typeArguments)
|
||||
val source = if (expression.source?.kind == KtFakeSourceElementKind.DelegatedPropertyAccessor) {
|
||||
val property = context.containingDeclarations.lastOrNull { it is FirProperty } as? FirProperty ?: return
|
||||
property.delegate?.source?.fakeElement(KtFakeSourceElementKind.DelegatedPropertyAccessor) ?: return
|
||||
} else {
|
||||
expression.source
|
||||
when {
|
||||
expression is FirVariableAssignment -> {
|
||||
val experimentalities = resolvedSymbol.loadExperimentalities(context, fromSetter = true, null) +
|
||||
loadExperimentalitiesFromTypeArguments(context, emptyList())
|
||||
reportNotAcceptedExperimentalities(experimentalities, expression.lValue, context, reporter)
|
||||
}
|
||||
|
||||
expression is FirQualifiedAccessExpression -> {
|
||||
val dispatchReceiverType = expression.dispatchReceiver?.resolvedType?.fullyExpandedType(context.session)
|
||||
|
||||
val experimentalities = resolvedSymbol.loadExperimentalities(context, fromSetter = false, dispatchReceiverType) +
|
||||
loadExperimentalitiesFromTypeArguments(context, expression.typeArguments)
|
||||
val source = if (expression.source?.kind == KtFakeSourceElementKind.DelegatedPropertyAccessor) {
|
||||
val property = context.containingDeclarations.lastOrNull { it is FirProperty } as? FirProperty ?: return
|
||||
property.delegate?.source?.fakeElement(KtFakeSourceElementKind.DelegatedPropertyAccessor) ?: return
|
||||
} else {
|
||||
expression.source
|
||||
}
|
||||
reportNotAcceptedExperimentalities(experimentalities, expression, context, reporter, source)
|
||||
}
|
||||
expression is FirDelegatedConstructorCall && resolvedSymbol is FirConstructorSymbol && resolvedSymbol.isFromEnumClass -> {
|
||||
val experimentalities = resolvedSymbol.loadExperimentalities(context, fromSetter = false, null)
|
||||
reportNotAcceptedExperimentalities(experimentalities, expression.calleeReference, context, reporter)
|
||||
}
|
||||
reportNotAcceptedExperimentalities(experimentalities, expression, context, reporter, source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user