From b1ab2ead618a6e479d7f4e5c382e726f78886423 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 25 Feb 2019 11:57:13 +0100 Subject: [PATCH] Restore find script definition behaviour (mostly) and relevant comments broken with refactoring --- .../kotlin/script/KotlinScriptDefinitionProvider.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/psi/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionProvider.kt b/compiler/psi/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionProvider.kt index ac884d054bd..8dec105c256 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionProvider.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionProvider.kt @@ -40,7 +40,8 @@ interface ScriptDefinitionProvider { } fun PsiFile.scriptDefinition(): KotlinScriptDefinition? { - if (this !is KtFile || this.script == null) return null + // Do not use psiFile.script, see comments in findScriptDefinition + if (this !is KtFile/* || this.script == null*/) return null val file = virtualFile ?: originalFile.virtualFile ?: return null if (file.isNonScript()) return null @@ -49,7 +50,10 @@ fun PsiFile.scriptDefinition(): KotlinScriptDefinition? { fun findScriptDefinition(file: VirtualFile, project: Project): KotlinScriptDefinition? { if (file.isNonScript()) return null - if ((PsiManager.getInstance(project).findFile(file) as? KtFile)?.script == null) return null + // Do not use psiFile.script here because this method can be called during indexes access + // and accessing stubs may cause deadlock + // TODO: measure performace effect and if necessary consider detecting indexing here or using separate logic for non-IDE operations to speed up filtering + if ((PsiManager.getInstance(project).findFile(file) as? KtFile)/*?.script*/ == null) return null return scriptDefinitionByFileName(project, file.name) }