[FIR] Add session parameter to all "element --> reference" utilities
`FirDeserializedEnumAccessExpression` requires session to build proper reference, so it's important to have it in all utilities, which may pass this element as input ^KT-64975
This commit is contained in:
committed by
Space Team
parent
bd9cb2b7e0
commit
150ff1172e
+1
-1
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.name.JsStandardClassIds
|
||||
|
||||
object FirJsDefinedExternallyCallChecker : FirBasicExpressionChecker(MppCheckerKind.Common) {
|
||||
override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val symbol = expression.toReference()?.toResolvedCallableSymbol() ?: return
|
||||
val symbol = expression.toReference(context.session)?.toResolvedCallableSymbol() ?: return
|
||||
|
||||
if (symbol.callableId !in JsStandardClassIds.Callables.definedExternallyPropertyNames) {
|
||||
return
|
||||
|
||||
+14
-14
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
|
||||
@@ -42,7 +43,7 @@ object FirJsDynamicCallChecker : FirQualifiedAccessExpressionChecker(MppCheckerK
|
||||
?: error("Resolved call callee without a callable symbol")
|
||||
|
||||
when {
|
||||
expression is FirCall && expression.isArrayAccessWithMultipleIndices -> reporter.reportOn(
|
||||
expression is FirCall && expression.isArrayAccessWithMultipleIndices(context.session) -> reporter.reportOn(
|
||||
expression.source, FirJsErrors.WRONG_OPERATION_WITH_DYNAMIC, "indexed access with more than one index", context
|
||||
)
|
||||
expression is FirFunctionCall && expression.isInOperator -> reporter.reportOn(
|
||||
@@ -62,22 +63,21 @@ object FirJsDynamicCallChecker : FirQualifiedAccessExpressionChecker(MppCheckerK
|
||||
}
|
||||
}
|
||||
|
||||
private val FirCall.isArrayAccessWithMultipleIndices: Boolean
|
||||
get() {
|
||||
val callee = toReference() as? FirNamedReference
|
||||
?: return false
|
||||
private fun FirCall.isArrayAccessWithMultipleIndices(session: FirSession): Boolean {
|
||||
val callee = toReference(session) as? FirNamedReference
|
||||
?: return false
|
||||
|
||||
if (callee.source?.kind != KtFakeSourceElementKind.ArrayAccessNameReference) {
|
||||
return false
|
||||
}
|
||||
|
||||
val arguments = (arguments.singleOrNull() as? FirVarargArgumentsExpression)?.arguments
|
||||
?: return false
|
||||
|
||||
return callee.name == OperatorNameConventions.GET && arguments.size >= 2
|
||||
|| callee.name == OperatorNameConventions.SET && arguments.size >= 3
|
||||
if (callee.source?.kind != KtFakeSourceElementKind.ArrayAccessNameReference) {
|
||||
return false
|
||||
}
|
||||
|
||||
val arguments = (arguments.singleOrNull() as? FirVarargArgumentsExpression)?.arguments
|
||||
?: return false
|
||||
|
||||
return callee.name == OperatorNameConventions.GET && arguments.size >= 2
|
||||
|| callee.name == OperatorNameConventions.SET && arguments.size >= 3
|
||||
}
|
||||
|
||||
private val FirFunctionCall.isInOperator
|
||||
get() = calleeReference.resolved?.name == OperatorNameConventions.CONTAINS && origin == FirFunctionCallOrigin.Operator
|
||||
|
||||
|
||||
Reference in New Issue
Block a user