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