[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
This commit is contained in:
committed by
Space Team
parent
163017fcaf
commit
0089517b25
+2
-3
@@ -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.FirErrorReferenceWithCandidate
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
||||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
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.fir.types.receiverType
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -44,7 +43,7 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
possibleExplicitReceiver: KtExpression?,
|
possibleExplicitReceiver: KtExpression?,
|
||||||
): KtExtensionApplicabilityResult {
|
): KtExtensionApplicabilityResult {
|
||||||
require(firSymbolForCandidate is KtFirSymbol<*>)
|
require(firSymbolForCandidate is KtFirSymbol<*>)
|
||||||
firSymbolForCandidate.firSymbol.lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE)
|
firSymbolForCandidate.firSymbol.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||||
val declaration = firSymbolForCandidate.firSymbol.fir as FirCallableDeclaration
|
val declaration = firSymbolForCandidate.firSymbol.fir as FirCallableDeclaration
|
||||||
return checkExtension(declaration, originalFile, nameExpression, possibleExplicitReceiver)
|
return checkExtension(declaration, originalFile, nameExpression, possibleExplicitReceiver)
|
||||||
}
|
}
|
||||||
@@ -73,7 +72,7 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
val receiverCastRequired = call.calleeReference is FirErrorReferenceWithCandidate
|
val receiverCastRequired = call.calleeReference is FirErrorReferenceWithCandidate
|
||||||
|
|
||||||
return when {
|
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)
|
KtExtensionApplicabilityResult.ApplicableAsFunctionalVariableCall(substitutor, receiverCastRequired, token)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user