Move script definition extraction functions to the plugin
plus finish refactoring of these functions
This commit is contained in:
@@ -16,15 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.script
|
||||
|
||||
import com.intellij.ide.highlighter.JavaClassFileType
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
interface ScriptDefinitionProvider {
|
||||
fun findScriptDefinition(fileName: String): KotlinScriptDefinition?
|
||||
@@ -39,41 +32,4 @@ interface ScriptDefinitionProvider {
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiFile.scriptDefinition(): KotlinScriptDefinition? {
|
||||
// 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
|
||||
|
||||
return scriptDefinitionByFileName(project, file.name)
|
||||
}
|
||||
|
||||
fun findScriptDefinition(file: VirtualFile, project: Project): KotlinScriptDefinition? {
|
||||
if (file.isNonScript()) 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)
|
||||
}
|
||||
|
||||
fun scriptDefinitionByFileName(project: Project, fileName: String): KotlinScriptDefinition {
|
||||
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) ?: return null
|
||||
?: throw IllegalStateException("Unable to get script definition: ScriptDefinitionProvider is not configured.")
|
||||
|
||||
return scriptDefinitionProvider.findScriptDefinition(fileName) ?: scriptDefinitionProvider.getDefaultScriptDefinition()
|
||||
}
|
||||
|
||||
private fun VirtualFile.isNonScript(): Boolean =
|
||||
isDirectory ||
|
||||
extension == KotlinFileType.EXTENSION ||
|
||||
extension == JavaClassFileType.INSTANCE.defaultExtension ||
|
||||
!this.isKotlinFileType()
|
||||
|
||||
private fun VirtualFile.isKotlinFileType(): Boolean {
|
||||
val typeRegistry = FileTypeRegistry.getInstance()
|
||||
return typeRegistry.getFileTypeByFile(this) == KotlinFileType.INSTANCE ||
|
||||
typeRegistry.getFileTypeByFileName(name) == KotlinFileType.INSTANCE
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user