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
@@ -176,21 +177,22 @@ private fun <T> PsiElement.collectInfos(c: ModuleInfoCollector<T>): T {
if (containingKtFile is KtCodeFragment) { if (containingKtFile is KtCodeFragment) {
val context = containingKtFile.getContext() val context = containingKtFile.getContext()
?: return c.onFailure("Analyzing code fragment of type ${containingKtFile::class.java} with no context element\nText:\n${containingKtFile.getText()}") ?: return c.onFailure("Analyzing code fragment of type ${containingKtFile::class.java} with no context element\nText:\n${containingKtFile.getText()}")
return context.collectInfos(c) return context.collectInfos(c)
} }
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))
} }
} }
} }