Analysis API: recreate analysis session when not found by resolve state

This commit is contained in:
Ilya Kirillov
2021-09-23 10:30:40 +02:00
parent 0915dac1f9
commit d63c136854
7 changed files with 15 additions and 13 deletions
@@ -29,6 +29,8 @@ public class AlwaysAccessibleValidityToken(project: Project) : ValidityToken() {
override fun getInaccessibilityReason(): String {
error("Getting inaccessibility reason for validity token when it is accessible")
}
override val factory: ValidityTokenFactory = AlwaysAccessibleValidityTokenFactory
}
public object AlwaysAccessibleValidityTokenFactory : ValidityTokenFactory() {
@@ -52,6 +52,8 @@ public class ReadActionConfinementValidityToken(project: Project) : ValidityToke
@HackToForceAllowRunningAnalyzeOnEDT
public val allowOnEdt: ThreadLocal<Boolean> = ThreadLocal.withInitial { false }
}
public override val factory: ValidityTokenFactory = ReadActionConfinementValidityTokenFactory
}
public object ReadActionConfinementValidityTokenFactory : ValidityTokenFactory() {
@@ -70,6 +72,7 @@ public object ReadActionConfinementValidityTokenFactory : ValidityTokenFactory()
private val currentAnalysisContextEnteringCount = ThreadLocal.withInitial { 0 }
internal fun isInsideAnalysisContext() = currentAnalysisContextEnteringCount.get() > 0
}
@RequiresOptIn("All frontend related work should not be allowed to be ran from EDT thread. Only use it as a temporary solution")
@@ -14,6 +14,8 @@ public abstract class ValidityToken {
public abstract fun isAccessible(): Boolean
public abstract fun getInaccessibilityReason(): String
public abstract val factory: ValidityTokenFactory
}
public abstract class ValidityTokenFactory {