From 2657cafa7b74604e054c01f6e53207bec3c8fb02 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 20 Dec 2023 20:50:03 +0100 Subject: [PATCH] [FIR] Add `session` property to the `FirConstCheckVisitor` --- .../fir/analysis/checkers/FirConstChecks.kt | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index 24212e1e503..495fd8c018b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -43,11 +43,11 @@ internal fun checkConstantArguments( ): ConstantArgumentKind { if (expression == null) return ConstantArgumentKind.VALID_CONST - val firConstCheckVisitor = FirConstCheckVisitor() + val firConstCheckVisitor = FirConstCheckVisitor(session) val expressionSymbol = expression.toReference()?.toResolvedCallableSymbol(discardErrorReference = true) val classKindOfParent = with(firConstCheckVisitor) { - (expressionSymbol?.getReferencedClassSymbol(session) as? FirRegularClassSymbol)?.classKind + (expressionSymbol?.getReferencedClassSymbol() as? FirRegularClassSymbol)?.classKind } val intrinsicConstEvaluation = session.languageVersionSettings.supportsFeature(LanguageFeature.IntrinsicConstEvaluation) @@ -170,7 +170,7 @@ internal fun checkConstantArguments( if (calleeReference !is FirResolvedNamedReference) return ConstantArgumentKind.NOT_CONST val symbol = calleeReference.resolvedSymbol as? FirNamedFunctionSymbol ?: return ConstantArgumentKind.NOT_CONST - if (!symbol.canBeEvaluated() && !with(firConstCheckVisitor) { expression.isCompileTimeBuiltinCall(session) }) { + if (!symbol.canBeEvaluated() && !with(firConstCheckVisitor) { expression.isCompileTimeBuiltinCall() }) { return ConstantArgumentKind.NOT_CONST } @@ -199,7 +199,7 @@ internal fun checkConstantArguments( val propertySymbol = expressionSymbol as? FirPropertySymbol ?: return ConstantArgumentKind.NOT_CONST when { - propertySymbol.unwrapFakeOverrides().canBeEvaluated() || with(firConstCheckVisitor) { propertySymbol.isCompileTimeBuiltinProperty(session) } -> { + propertySymbol.unwrapFakeOverrides().canBeEvaluated() || with(firConstCheckVisitor) { propertySymbol.isCompileTimeBuiltinProperty() } -> { val receiver = listOf(expression.dispatchReceiver, expression.extensionReceiver).single { it != null }!! return checkConstantArguments(receiver, session) } @@ -237,7 +237,7 @@ internal enum class ConstantArgumentKind { } } -private class FirConstCheckVisitor() : FirVisitor() { +private class FirConstCheckVisitor(private val session: FirSession) : FirVisitor() { private val compileTimeFunctions = setOf( *OperatorNameConventions.BINARY_OPERATION_NAMES.toTypedArray(), *OperatorNameConventions.UNARY_OPERATION_NAMES.toTypedArray(), OperatorNameConventions.SHL, OperatorNameConventions.SHR, OperatorNameConventions.USHR, @@ -255,7 +255,9 @@ private class FirConstCheckVisitor() : FirVisitor() ?: return false val receiverClassId = receiverType.fullyExpandedClassId(session) ?: return false return when (name.asString()) { @@ -293,7 +295,7 @@ private class FirConstCheckVisitor() : FirVisitor?.getReferencedClassSymbol(session: FirSession): FirBasedSymbol<*>? = + fun FirCallableSymbol<*>?.getReferencedClassSymbol(): FirBasedSymbol<*>? = this?.resolvedReturnTypeRef ?.coneTypeSafe() ?.lookupTag