From 0089517b2515cefbb4669d96f6afdcfdd7b93059 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 23 Feb 2023 19:40:41 +0100 Subject: [PATCH] [Analysis API FIR] optimize KtFirCompletionCandidateChecker.checkExtensionFitsCandidate We do not need running IMPLICIT_TYPES_BODY_RESOLVE to check candidate applicability. Additional resolve to IMPLICIT_TYPES_BODY_RESOLVE takes about 5% of completion time ^KTIJ-24640 --- .../api/fir/components/KtFirCompletionCandidateChecker.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt index 69b92b769ce..361a46adc50 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase -import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.receiverType import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFile @@ -44,7 +43,7 @@ internal class KtFirCompletionCandidateChecker( possibleExplicitReceiver: KtExpression?, ): KtExtensionApplicabilityResult { require(firSymbolForCandidate is KtFirSymbol<*>) - firSymbolForCandidate.firSymbol.lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) + firSymbolForCandidate.firSymbol.lazyResolveToPhase(FirResolvePhase.STATUS) val declaration = firSymbolForCandidate.firSymbol.fir as FirCallableDeclaration return checkExtension(declaration, originalFile, nameExpression, possibleExplicitReceiver) } @@ -73,7 +72,7 @@ internal class KtFirCompletionCandidateChecker( val receiverCastRequired = call.calleeReference is FirErrorReferenceWithCandidate return when { - candidateSymbol is FirVariable && candidateSymbol.returnTypeRef.coneType.receiverType(rootModuleSession) != null -> { + candidateSymbol is FirVariable && candidateSymbol.symbol.resolvedReturnType.receiverType(rootModuleSession) != null -> { KtExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall(substitutor, receiverCastRequired, token) } else -> {