[AA] forbid analyze from write action
Analysis is not supposed to be called from write action. Such actions can lead to IDE freezes and incorrect behavior ^KT-60586 Fixed
This commit is contained in:
committed by
Space Team
parent
c624bba8cd
commit
88da053408
@@ -39,6 +39,7 @@ projectTest(jUnitMode = JUnitMode.JUnit5) {
|
||||
|
||||
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
|
||||
kotlinOptions.freeCompilerArgs += "-Xcontext-receivers"
|
||||
kotlinOptions.freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.analysis.api.lifetime.KtAllowProhibitedAnalyzeFromWriteAction"
|
||||
}
|
||||
|
||||
|
||||
|
||||
+6
-2
@@ -8,9 +8,11 @@ package org.jetbrains.kotlin.light.classes.symbol
|
||||
import com.intellij.psi.JavaPsiFacade
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiType
|
||||
import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisFromWriteAction
|
||||
import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisOnEdt
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.analyze
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisFromWriteAction
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
@@ -19,8 +21,10 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
internal fun PsiElement.nonExistentType(): PsiType =
|
||||
JavaPsiFacade.getElementFactory(project).createTypeFromText(StandardNames.NON_EXISTENT_CLASS.asString(), this)
|
||||
|
||||
@OptIn(KtAllowAnalysisOnEdt::class)
|
||||
private inline fun <E> allowLightClassesOnEdt(crossinline action: () -> E): E = allowAnalysisOnEdt(action)
|
||||
@OptIn(KtAllowAnalysisOnEdt::class, KtAllowAnalysisFromWriteAction::class)
|
||||
private inline fun <E> allowLightClassesOnEdt(crossinline action: () -> E): E = allowAnalysisFromWriteAction {
|
||||
allowAnalysisOnEdt(action)
|
||||
}
|
||||
|
||||
internal inline fun <R> analyzeForLightClasses(context: KtElement, crossinline action: KtAnalysisSession.() -> R): R =
|
||||
allowLightClassesOnEdt {
|
||||
|
||||
Reference in New Issue
Block a user