Fix readAccess in getModuleInfo.kt on obtaining script
#EA-211576 Fixed
This commit is contained in:
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user