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 getOrBuildFirFor(element: KtElement, toPhase: FirResolvePhase): FirElement
|
||||||
|
|
||||||
|
abstract fun getFirFile(ktFile: KtFile): FirFile
|
||||||
|
|
||||||
abstract fun getDiagnostics(element: KtElement): List<Diagnostic>
|
abstract fun getDiagnostics(element: KtElement): List<Diagnostic>
|
||||||
|
|
||||||
// todo temporary, used only in completion
|
// todo temporary, used only in completion
|
||||||
@@ -77,6 +79,9 @@ internal class FirModuleResolveStateImpl(
|
|||||||
override fun getOrBuildFirFor(element: KtElement, toPhase: FirResolvePhase): FirElement =
|
override fun getOrBuildFirFor(element: KtElement, toPhase: FirResolvePhase): FirElement =
|
||||||
elementBuilder.getOrBuildFirFor(element, currentModuleSourcesSession.cache, fileStructureCache)
|
elementBuilder.getOrBuildFirFor(element, currentModuleSourcesSession.cache, fileStructureCache)
|
||||||
|
|
||||||
|
override fun getFirFile(ktFile: KtFile): FirFile =
|
||||||
|
firFileBuilder.buildRawFirFileWithCaching(ktFile, currentModuleSourcesSession.cache)
|
||||||
|
|
||||||
override fun getDiagnostics(element: KtElement): List<Diagnostic> =
|
override fun getDiagnostics(element: KtElement): List<Diagnostic> =
|
||||||
diagnosticsCollector.getDiagnosticsFor(element)
|
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) {
|
override fun recordPsiToFirMappingsForCompletionFrom(fir: FirDeclaration, firFile: FirFile, ktFile: KtFile) {
|
||||||
fir.accept(FirElementsRecorder(), completionMapping)
|
fir.accept(FirElementsRecorder(), completionMapping)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -66,9 +66,9 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
nameExpression: KtSimpleNameExpression,
|
nameExpression: KtSimpleNameExpression,
|
||||||
possibleExplicitReceiver: KtExpression?,
|
possibleExplicitReceiver: KtExpression?,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val file = originalFile.getOrBuildFirOfType<FirFile>(firResolveState)
|
val file = firResolveState.getFirFile(originalFile)
|
||||||
val explicitReceiverExpression = possibleExplicitReceiver?.getOrBuildFirOfType<FirExpression>(firResolveState)
|
val explicitReceiverExpression = possibleExplicitReceiver?.getOrBuildFirOfType<FirExpression>(firResolveState)
|
||||||
val resolver = SingleCandidateResolver(firResolveState.firIdeSourcesSession, file)
|
val resolver = SingleCandidateResolver(firResolveState.currentModuleSourcesSession, file)
|
||||||
val implicitReceivers = getImplicitReceivers(originalFile, file, nameExpression)
|
val implicitReceivers = getImplicitReceivers(originalFile, file, nameExpression)
|
||||||
for (implicitReceiverValue in implicitReceivers) {
|
for (implicitReceiverValue in implicitReceivers) {
|
||||||
val resolutionParameters = ResolutionParameters(
|
val resolutionParameters = ResolutionParameters(
|
||||||
|
|||||||
Reference in New Issue
Block a user