FIR IDE: do not use helper methods unavailable in intellij-core
This commit is contained in:
+15
-8
@@ -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]
|
||||
|
||||
-1
@@ -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>
|
||||
|
||||
+3
-2
@@ -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,
|
||||
|
||||
+4
-2
@@ -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,
|
||||
|
||||
+2
-2
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user