[kotlin] Reuse applicability checker between extension candidates
Before, auto-completion was based on on-air resolve, and 'FirTowerDataContext' was computed once, during creation of the dependent analysis session (with using 'FirTowerDataContextCollector'). This allowed to return the context almost instantly, no matter how many completion candidates there were. Dangling file resolution doesn't use 'FirTowerDataContextCollector', as now there is more precise 'ContextCollector'. However, 'ContextCollector' doesn't cache results by itself, and, if asked, it will compute the same context over and over again. This exact happened with extension applicability checker. The optimized implementation maintains a checker object which caches the computed context. The old end-point is left to give the IDE plugin time to adapt to the change. ^KTIJ-28445
This commit is contained in:
+10
-1
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtCompletionCandidateChecker
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtExtensionApplicabilityResult
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtCompletionExtensionCandidateChecker
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
@@ -22,6 +22,15 @@ internal class KtFe10CompletionCandidateChecker(
|
||||
override val token: KtLifetimeToken
|
||||
get() = analysisSession.token
|
||||
|
||||
override fun createExtensionCandidateChecker(
|
||||
originalFile: KtFile,
|
||||
nameExpression: KtSimpleNameExpression,
|
||||
explicitReceiver: KtExpression?
|
||||
): KtCompletionExtensionCandidateChecker {
|
||||
throw NotImplementedError("Method is not implemented for FE 1.0")
|
||||
}
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
override fun checkExtensionFitsCandidate(
|
||||
firSymbolForCandidate: KtCallableSymbol,
|
||||
originalFile: KtFile,
|
||||
|
||||
Reference in New Issue
Block a user