From 03c7f4bf00e0087b5a311305285c2d5d547c2b0d Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Fri, 25 Oct 2019 15:39:30 +0200 Subject: [PATCH] Wrap KtClassOrObject.isLocal, KtFile.isScript with runReadAction in LightClasses #EA-211576 Fixed (cherry picked from commit 75a59d4bced714af51abd7e354bc873313b28051) --- .../kotlin/asJava/builder/LightClassDataProvider.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt index e11c044f12d..f48cac10a7e 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt @@ -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 }