FIR IDE: do not resolve whole firFile in completion
This commit is contained in:
+5
@@ -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)
|
||||
|
||||
|
||||
+3
@@ -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)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user