Wrap KtClassOrObject.isLocal, KtFile.isScript with runReadAction in LightClasses

#EA-211576 Fixed

(cherry picked from commit 75a59d4bced714af51abd7e354bc873313b28051)
This commit is contained in:
Vladimir Dolzhenko
2019-10-25 15:39:30 +02:00
parent 00055fc20a
commit 03c7f4bf00
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
import org.jetbrains.kotlin.asJava.classes.safeIsLocal
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
import org.jetbrains.kotlin.codegen.MemberCodegen
import org.jetbrains.kotlin.codegen.state.GenerationState
@@ -59,7 +60,7 @@ class LightClassDataProviderForClassOrObject(
val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project)
return CachedValueProvider.Result.create(
computeLightClassData(),
if (classOrObject.isLocal) trackerService.modificationTracker else trackerService.outOfBlockModificationTracker
if (classOrObject.safeIsLocal()) trackerService.modificationTracker else trackerService.outOfBlockModificationTracker
)
}
@@ -188,7 +189,7 @@ private class ClassFilterForClassOrObject(private val classOrObject: KtClassOrOb
// TODO: current method will process local classes in irrelevant declarations, it should be fixed.
// We generate all enclosing classes
if (classOrObject.isLocal && processingClassOrObject.isLocal) {
if (classOrObject.safeIsLocal() && processingClassOrObject.safeIsLocal()) {
val commonParent = PsiTreeUtil.findCommonParent(classOrObject, processingClassOrObject)
return commonParent != null && commonParent !is PsiFile
}