FIR IDE: do not use helper methods unavailable in intellij-core

This commit is contained in:
Ilya Kirillov
2021-06-14 16:27:58 +02:00
parent 32919489f4
commit 7fe2adc37e
5 changed files with 24 additions and 15 deletions
@@ -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 <R> analyse(contextElement: KtElement, action: KtAnalysisSession.() -> R): R =
contextElement.project
.service<KtAnalysisSessionProvider>()
KtAnalysisSessionProvider.getInstance(contextElement.project)
.analyse(contextElement, ReadActionConfinementValidityTokenFactory, action)
@OptIn(InvalidWayOfUsingAnalysisSession::class)
@@ -91,7 +96,8 @@ inline fun <R> analyseWithCustomToken(
tokenFactory: ValidityTokenFactory,
action: KtAnalysisSession.() -> R
): R =
contextElement.project.service<KtAnalysisSessionProvider>().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 <R> analyseInDependedAnalysisSession(
elementToReanalyze: KtElement,
action: KtAnalysisSession.() -> R
): R =
originalFile.project.service<KtAnalysisSessionProvider>().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 <R> analyseInDependedAnalysisSession(
inline fun <R> 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]
@@ -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<KtSymbol>
@@ -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,
@@ -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,
@@ -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 <R> analyzeWithSymbolAsContext(
require(contextSymbol is KtFirSymbol<*>)
val resolveState = contextSymbol.firRef.resolveState
val token = contextSymbol.token
val analysisSessionProvider = resolveState.project.service<KtAnalysisSessionProvider>()
val analysisSessionProvider = ServiceManager.getService(resolveState.project, KtAnalysisSessionProvider::class.java)
check(analysisSessionProvider is KtFirAnalysisSessionProvider)
val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token)
?: throw EntityWasGarbageCollectedException("KtAnalysisSession")