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.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject 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.CompilationErrorHandler
import org.jetbrains.kotlin.codegen.MemberCodegen import org.jetbrains.kotlin.codegen.MemberCodegen
import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.GenerationState
@@ -59,7 +60,7 @@ class LightClassDataProviderForClassOrObject(
val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project) val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project)
return CachedValueProvider.Result.create( return CachedValueProvider.Result.create(
computeLightClassData(), 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. // TODO: current method will process local classes in irrelevant declarations, it should be fixed.
// We generate all enclosing classes // We generate all enclosing classes
if (classOrObject.isLocal && processingClassOrObject.isLocal) { if (classOrObject.safeIsLocal() && processingClassOrObject.safeIsLocal()) {
val commonParent = PsiTreeUtil.findCommonParent(classOrObject, processingClassOrObject) val commonParent = PsiTreeUtil.findCommonParent(classOrObject, processingClassOrObject)
return commonParent != null && commonParent !is PsiFile return commonParent != null && commonParent !is PsiFile
} }