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.Disposable
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
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.ProgressIndicator
|
||||||
import com.intellij.openapi.progress.Task
|
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.AlwaysAccessibleValidityTokenFactory
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ReadActionConfinementValidityTokenFactory
|
import org.jetbrains.kotlin.idea.frontend.api.tokens.ReadActionConfinementValidityTokenFactory
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityTokenFactory
|
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.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
@@ -65,6 +66,11 @@ abstract class KtAnalysisSessionProvider : Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun dispose() {}
|
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)
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
inline fun <R> analyse(contextElement: KtElement, action: KtAnalysisSession.() -> R): R =
|
inline fun <R> analyse(contextElement: KtElement, action: KtAnalysisSession.() -> R): R =
|
||||||
contextElement.project
|
KtAnalysisSessionProvider.getInstance(contextElement.project)
|
||||||
.service<KtAnalysisSessionProvider>()
|
|
||||||
.analyse(contextElement, ReadActionConfinementValidityTokenFactory, action)
|
.analyse(contextElement, ReadActionConfinementValidityTokenFactory, action)
|
||||||
|
|
||||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
@@ -91,7 +96,8 @@ inline fun <R> analyseWithCustomToken(
|
|||||||
tokenFactory: ValidityTokenFactory,
|
tokenFactory: ValidityTokenFactory,
|
||||||
action: KtAnalysisSession.() -> R
|
action: KtAnalysisSession.() -> R
|
||||||
): 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
|
* UAST-specific version of [analyse] that executes the given [action] in [KtAnalysisSession] context
|
||||||
@@ -109,7 +115,8 @@ inline fun <R> analyseInDependedAnalysisSession(
|
|||||||
elementToReanalyze: KtElement,
|
elementToReanalyze: KtElement,
|
||||||
action: KtAnalysisSession.() -> R
|
action: KtAnalysisSession.() -> R
|
||||||
): 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
|
* 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(
|
inline fun <R> analyseWithReadAction(
|
||||||
contextElement: KtElement,
|
contextElement: KtElement,
|
||||||
crossinline action: KtAnalysisSession.() -> R
|
crossinline action: KtAnalysisSession.() -> R
|
||||||
): R = runReadAction {
|
): R = ApplicationManager.getApplication().runReadAction(Computable {
|
||||||
analyse(contextElement, action)
|
analyse(contextElement, action)
|
||||||
}
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show a modal window with a progress bar and specified [windowTitle]
|
* 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.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.references.KtReference
|
import org.jetbrains.kotlin.idea.references.KtReference
|
||||||
import org.jetbrains.kotlin.idea.references.KtSimpleReference
|
|
||||||
|
|
||||||
interface KtSymbolBasedReference : KtReference {
|
interface KtSymbolBasedReference : KtReference {
|
||||||
fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol>
|
fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol>
|
||||||
|
|||||||
+3
-2
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api
|
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.project.Project
|
||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
@@ -35,7 +35,8 @@ internal class FirIdeResolveStateService(project: Project) {
|
|||||||
stateCache.computeIfAbsent(moduleInfo) { createResolveStateFor(moduleInfo, sessionProviderStorage) }
|
stateCache.computeIfAbsent(moduleInfo) { createResolveStateFor(moduleInfo, sessionProviderStorage) }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(project: Project): FirIdeResolveStateService = project.service()
|
fun getInstance(project: Project): FirIdeResolveStateService =
|
||||||
|
ServiceManager.getService(project, FirIdeResolveStateService::class.java)
|
||||||
|
|
||||||
internal fun createResolveStateFor(
|
internal fun createResolveStateFor(
|
||||||
moduleInfo: IdeaModuleInfo,
|
moduleInfo: IdeaModuleInfo,
|
||||||
|
|||||||
+4
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.providers
|
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.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
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.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.FirFileBuilder
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -41,7 +42,8 @@ internal class FirIdeProvider(
|
|||||||
override val symbolProvider: FirSymbolProvider = SymbolProvider()
|
override val symbolProvider: FirSymbolProvider = SymbolProvider()
|
||||||
|
|
||||||
private val indexHelper = IndexHelper(project, searchScope)
|
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(
|
private val providerHelper = FirProviderHelper(
|
||||||
cache,
|
cache,
|
||||||
|
|||||||
+2
-2
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir
|
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.InvalidWayOfUsingAnalysisSession
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider
|
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider
|
||||||
@@ -21,7 +21,7 @@ internal inline fun <R> analyzeWithSymbolAsContext(
|
|||||||
require(contextSymbol is KtFirSymbol<*>)
|
require(contextSymbol is KtFirSymbol<*>)
|
||||||
val resolveState = contextSymbol.firRef.resolveState
|
val resolveState = contextSymbol.firRef.resolveState
|
||||||
val token = contextSymbol.token
|
val token = contextSymbol.token
|
||||||
val analysisSessionProvider = resolveState.project.service<KtAnalysisSessionProvider>()
|
val analysisSessionProvider = ServiceManager.getService(resolveState.project, KtAnalysisSessionProvider::class.java)
|
||||||
check(analysisSessionProvider is KtFirAnalysisSessionProvider)
|
check(analysisSessionProvider is KtFirAnalysisSessionProvider)
|
||||||
val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token)
|
val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token)
|
||||||
?: throw EntityWasGarbageCollectedException("KtAnalysisSession")
|
?: throw EntityWasGarbageCollectedException("KtAnalysisSession")
|
||||||
|
|||||||
Reference in New Issue
Block a user