Fix readAccess in getModuleInfo.kt on obtaining script

#EA-211576 Fixed
This commit is contained in:
Vladimir Dolzhenko
2019-10-15 08:46:47 +02:00
parent ba01678abb
commit 625dbfa699
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.util.isKotlinBinary
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.runReadAction
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.kotlin.utils.sure import org.jetbrains.kotlin.utils.sure
@@ -183,14 +184,15 @@ private fun <T> PsiElement.collectInfos(c: ModuleInfoCollector<T>): T {
val virtualFile = containingFile.originalFile.virtualFile val virtualFile = containingFile.originalFile.virtualFile
?: return c.onFailure("Analyzing element of type ${this::class.java} in non-physical file $containingFile of type ${containingFile::class.java}\nText:\n$text") ?: return c.onFailure("Analyzing element of type ${this::class.java} in non-physical file $containingFile of type ${containingFile::class.java}\nText:\n$text")
if (containingKtFile?.isScript() == true) { val isScript = runReadAction { containingKtFile?.isScript() == true }
if (isScript) {
getModuleRelatedModuleInfo(project, virtualFile)?.let { getModuleRelatedModuleInfo(project, virtualFile)?.let {
return c.onResult(it) return c.onResult(it)
} }
containingKtFile.script?.let { val script = runReadAction { containingKtFile?.script }
val definition = containingKtFile.findScriptDefinition() script?.let {
if (definition != null) { containingKtFile?.findScriptDefinition()?.let {
return c.onResult(ScriptModuleInfo(project, virtualFile, definition)) return c.onResult(ScriptModuleInfo(project, virtualFile, it))
} }
} }
} }