FIR IDE: do not resolve whole firFile in completion

This commit is contained in:
Ilya Kirillov
2020-09-12 12:08:43 +03:00
parent 2cfbfabe04
commit 01875635db
3 changed files with 10 additions and 2 deletions
@@ -39,6 +39,8 @@ abstract class FirModuleResolveState {
abstract fun getOrBuildFirFor(element: KtElement, toPhase: FirResolvePhase): FirElement
abstract fun getFirFile(ktFile: KtFile): FirFile
abstract fun getDiagnostics(element: KtElement): List<Diagnostic>
// todo temporary, used only in completion
@@ -77,6 +79,9 @@ internal class FirModuleResolveStateImpl(
override fun getOrBuildFirFor(element: KtElement, toPhase: FirResolvePhase): FirElement =
elementBuilder.getOrBuildFirFor(element, currentModuleSourcesSession.cache, fileStructureCache)
override fun getFirFile(ktFile: KtFile): FirFile =
firFileBuilder.buildRawFirFileWithCaching(ktFile, currentModuleSourcesSession.cache)
override fun getDiagnostics(element: KtElement): List<Diagnostic> =
diagnosticsCollector.getDiagnosticsFor(element)
@@ -47,6 +47,9 @@ internal class FirModuleResolveStateForCompletion(
)
}
override fun getFirFile(ktFile: KtFile): FirFile =
originalState.getFirFile(ktFile)
override fun recordPsiToFirMappingsForCompletionFrom(fir: FirDeclaration, firFile: FirFile, ktFile: KtFile) {
fir.accept(FirElementsRecorder(), completionMapping)
}
@@ -66,9 +66,9 @@ internal class KtFirCompletionCandidateChecker(
nameExpression: KtSimpleNameExpression,
possibleExplicitReceiver: KtExpression?,
): Boolean {
val file = originalFile.getOrBuildFirOfType<FirFile>(firResolveState)
val file = firResolveState.getFirFile(originalFile)
val explicitReceiverExpression = possibleExplicitReceiver?.getOrBuildFirOfType<FirExpression>(firResolveState)
val resolver = SingleCandidateResolver(firResolveState.firIdeSourcesSession, file)
val resolver = SingleCandidateResolver(firResolveState.currentModuleSourcesSession, file)
val implicitReceivers = getImplicitReceivers(originalFile, file, nameExpression)
for (implicitReceiverValue in implicitReceivers) {
val resolutionParameters = ResolutionParameters(