From 7fe2adc37eff75d216dcc8dcfceba16f728caed9 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 14 Jun 2021 16:27:58 +0200 Subject: [PATCH] FIR IDE: do not use helper methods unavailable in intellij-core --- .../frontend/api/KtAnalysisSessionProvider.kt | 23 ++++++++++++------- .../frontend/api/KtSymbolBasedReference.kt | 1 - .../level/api/FirIdeResolveStateService.kt | 5 ++-- .../low/level/api/providers/FirIdeProvider.kt | 6 +++-- .../api/fir/analysisSessionInternalUtils.kt | 4 ++-- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt index 13d46321f44..97748a8cb2e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt @@ -7,13 +7,14 @@ package org.jetbrains.kotlin.idea.frontend.api import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.components.service +import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.Task +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Computable import org.jetbrains.kotlin.idea.frontend.api.tokens.AlwaysAccessibleValidityTokenFactory import org.jetbrains.kotlin.idea.frontend.api.tokens.ReadActionConfinementValidityTokenFactory import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityTokenFactory -import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile @@ -65,6 +66,11 @@ abstract class KtAnalysisSessionProvider : Disposable { } override fun dispose() {} + + companion object { + fun getInstance(project: Project): KtAnalysisSessionProvider = + ServiceManager.getService(project, KtAnalysisSessionProvider::class.java) + } } /** @@ -81,8 +87,7 @@ abstract class KtAnalysisSessionProvider : Disposable { */ @OptIn(InvalidWayOfUsingAnalysisSession::class) inline fun analyse(contextElement: KtElement, action: KtAnalysisSession.() -> R): R = - contextElement.project - .service() + KtAnalysisSessionProvider.getInstance(contextElement.project) .analyse(contextElement, ReadActionConfinementValidityTokenFactory, action) @OptIn(InvalidWayOfUsingAnalysisSession::class) @@ -91,7 +96,8 @@ inline fun analyseWithCustomToken( tokenFactory: ValidityTokenFactory, action: KtAnalysisSession.() -> R ): R = - contextElement.project.service().analyse(contextElement, tokenFactory, action) + KtAnalysisSessionProvider.getInstance(contextElement.project) + .analyse(contextElement, tokenFactory, action) /** * UAST-specific version of [analyse] that executes the given [action] in [KtAnalysisSession] context @@ -109,7 +115,8 @@ inline fun analyseInDependedAnalysisSession( elementToReanalyze: KtElement, action: KtAnalysisSession.() -> R ): R = - originalFile.project.service().analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action) + KtAnalysisSessionProvider.getInstance(originalFile.project) + .analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action) /** * Execute given [action] in [KtAnalysisSession] context like [analyse] does but execute it in read action @@ -126,9 +133,9 @@ inline fun analyseInDependedAnalysisSession( inline fun analyseWithReadAction( contextElement: KtElement, crossinline action: KtAnalysisSession.() -> R -): R = runReadAction { +): R = ApplicationManager.getApplication().runReadAction(Computable { analyse(contextElement, action) -} +}) /** * Show a modal window with a progress bar and specified [windowTitle] diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtSymbolBasedReference.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtSymbolBasedReference.kt index 774cc6225bb..f6eb8ddd915 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtSymbolBasedReference.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtSymbolBasedReference.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.frontend.api import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.references.KtReference -import org.jetbrains.kotlin.idea.references.KtSimpleReference interface KtSymbolBasedReference : KtReference { fun KtAnalysisSession.resolveToSymbols(): Collection diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt index e2e40090235..c22e110e840 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api -import com.intellij.openapi.components.service +import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootModificationTracker import org.jetbrains.annotations.TestOnly @@ -35,7 +35,8 @@ internal class FirIdeResolveStateService(project: Project) { stateCache.computeIfAbsent(moduleInfo) { createResolveStateFor(moduleInfo, sessionProviderStorage) } companion object { - fun getInstance(project: Project): FirIdeResolveStateService = project.service() + fun getInstance(project: Project): FirIdeResolveStateService = + ServiceManager.getService(project, FirIdeResolveStateService::class.java) internal fun createResolveStateFor( moduleInfo: IdeaModuleInfo, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt index eb147ac21c0..05ff1cc39e4 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers +import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.fir.FirSession @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.fir.low.level.api.IndexHelper -import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceCheckerForSingleModule +import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveStateConfigurator import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.name.ClassId @@ -41,7 +42,8 @@ internal class FirIdeProvider( override val symbolProvider: FirSymbolProvider = SymbolProvider() private val indexHelper = IndexHelper(project, searchScope) - private val packageExistenceChecker = PackageExistenceCheckerForSingleModule(project, moduleInfo) + private val packageExistenceChecker = ServiceManager.getService(project, FirModuleResolveStateConfigurator::class.java) + .createPackageExistingCheckerForModule(moduleInfo) private val providerHelper = FirProviderHelper( cache, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt index afa052ccda9..eee112704f9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir -import com.intellij.openapi.components.service +import com.intellij.openapi.components.ServiceManager import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider @@ -21,7 +21,7 @@ internal inline fun analyzeWithSymbolAsContext( require(contextSymbol is KtFirSymbol<*>) val resolveState = contextSymbol.firRef.resolveState val token = contextSymbol.token - val analysisSessionProvider = resolveState.project.service() + val analysisSessionProvider = ServiceManager.getService(resolveState.project, KtAnalysisSessionProvider::class.java) check(analysisSessionProvider is KtFirAnalysisSessionProvider) val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token) ?: throw EntityWasGarbageCollectedException("KtAnalysisSession")