[LL API] Don't invalidate 'LLFirResolvableResolveSession' on OOBs
This commit is contained in:
+4
-6
@@ -30,13 +30,11 @@ class LLFirResolveSessionService(project: Project) {
|
||||
}
|
||||
|
||||
private fun create(module: KtModule, factory: (KtModule) -> LLFirSession): LLFirResolvableResolveSession {
|
||||
val session = factory(module)
|
||||
|
||||
return when (module) {
|
||||
is KtSourceModule -> LLFirSourceResolveSession(session)
|
||||
is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(session)
|
||||
is KtScriptModule -> LLFirScriptResolveSession(session)
|
||||
is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(session)
|
||||
is KtSourceModule -> LLFirSourceResolveSession(module, factory)
|
||||
is KtLibraryModule, is KtLibrarySourceModule -> LLFirLibraryOrLibrarySourceResolvableResolveSession(module, factory)
|
||||
is KtScriptModule -> LLFirScriptResolveSession(module, factory)
|
||||
is KtNotUnderContentRootModule -> LLFirNotUnderContentRootResolveSession(module, factory)
|
||||
else -> {
|
||||
errorWithFirSpecificEntries("Unexpected ${module::class.java}") {
|
||||
withEntry("module", module) { it.moduleDescription }
|
||||
|
||||
+3
-2
@@ -14,8 +14,9 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
internal class LLFirLibraryOrLibrarySourceResolvableResolveSession(
|
||||
useSiteFirSession: LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteFirSession) {
|
||||
useSiteKtModule: KtModule,
|
||||
useSiteSessionFactory: (KtModule) -> LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteKtModule, useSiteSessionFactory) {
|
||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
||||
emptyList()
|
||||
|
||||
|
||||
+3
-2
@@ -13,8 +13,9 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
internal class LLFirNotUnderContentRootResolveSession(
|
||||
useSiteFirSession: LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteFirSession) {
|
||||
useSiteKtModule: KtModule,
|
||||
useSiteSessionFactory: (KtModule) -> LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteKtModule, useSiteSessionFactory) {
|
||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
||||
emptyList()
|
||||
|
||||
|
||||
+12
-10
@@ -5,8 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.state
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||
@@ -41,21 +42,22 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
@Suppress("PrivatePropertyName")
|
||||
private val LOG = Logger.getInstance(LLFirResolvableResolveSession::class.java)
|
||||
|
||||
internal abstract class LLFirResolvableResolveSession(
|
||||
final override val useSiteFirSession: LLFirSession
|
||||
final override val useSiteKtModule: KtModule,
|
||||
private val useSiteSessionFactory: (KtModule) -> LLFirSession
|
||||
) : LLFirResolveSession() {
|
||||
final override val useSiteKtModule: KtModule
|
||||
get() = useSiteFirSession.ktModule
|
||||
|
||||
final override val project: Project
|
||||
get() = useSiteKtModule.project
|
||||
|
||||
override fun getSessionFor(module: KtModule): LLFirSession {
|
||||
LOG.assertTrue(useSiteFirSession.isValid, "Use-site session is invalid")
|
||||
private val useSiteFirSessionCached = CachedValuesManager.getManager(project).createCachedValue {
|
||||
val session = useSiteSessionFactory(useSiteKtModule)
|
||||
CachedValueProvider.Result.create(session, session.modificationTracker)
|
||||
}
|
||||
|
||||
final override val useSiteFirSession: LLFirSession
|
||||
get() = useSiteFirSessionCached.value
|
||||
|
||||
override fun getSessionFor(module: KtModule): LLFirSession {
|
||||
if (module == useSiteFirSession.ktModule) {
|
||||
return useSiteFirSession
|
||||
}
|
||||
|
||||
+4
-3
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.state
|
||||
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.*
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
|
||||
import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
|
||||
@@ -14,8 +14,9 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
internal class LLFirScriptResolveSession(
|
||||
useSiteFirSession: LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteFirSession) {
|
||||
useSiteKtModule: KtModule,
|
||||
useSiteSessionFactory: (KtModule) -> LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteKtModule, useSiteSessionFactory) {
|
||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> {
|
||||
val moduleComponents = getModuleComponentsForElement(element)
|
||||
return moduleComponents.diagnosticsCollector.getDiagnosticsFor(element, filter)
|
||||
|
||||
+3
-2
@@ -17,8 +17,9 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
internal class LLFirSourceResolveSession(
|
||||
useSiteFirSession: LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteFirSession) {
|
||||
useSiteKtModule: KtModule,
|
||||
useSiteSessionFactory: (KtModule) -> LLFirSession
|
||||
) : LLFirResolvableResolveSession(useSiteKtModule, useSiteSessionFactory) {
|
||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> {
|
||||
val moduleComponents = getModuleComponentsForElement(element)
|
||||
return moduleComponents.diagnosticsCollector.getDiagnosticsFor(element, filter)
|
||||
|
||||
Reference in New Issue
Block a user