Replace script recognition from by PsiFile to by virtual file, fix custom script name generation
This commit is contained in:
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.cli.jvm.repl
|
||||
import com.google.common.base.Throwables
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.vfs.CharsetToolkit
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFileFactory
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl
|
||||
import com.intellij.testFramework.LightVirtualFile
|
||||
@@ -239,7 +239,7 @@ class ReplInterpreter(
|
||||
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> = emptyList()
|
||||
|
||||
override fun isScript(file: PsiFile): Boolean = StandardScriptDefinition.isScript(file)
|
||||
override fun isScript(file: VirtualFile): Boolean = StandardScriptDefinition.isScript(file)
|
||||
|
||||
override fun getScriptName(script: KtScript): Name = StandardScriptDefinition.getScriptName(script)
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class KotlinParser implements PsiParser {
|
||||
@NotNull
|
||||
public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) {
|
||||
KotlinParsing jetParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
|
||||
if (scriptDefinitionProvider != null && scriptDefinitionProvider.isScript(psiFile)
|
||||
if (scriptDefinitionProvider != null && scriptDefinitionProvider.isScript(psiFile.getOriginalFile().getVirtualFile())
|
||||
|| psiFile.getName().endsWith(KotlinParserDefinition.STD_SCRIPT_EXT)) {
|
||||
jetParsing.parseScript();
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implement
|
||||
}
|
||||
KtFile containingKtFile = getContainingKtFile();
|
||||
KotlinScriptDefinition kotlinScriptDefinition =
|
||||
KotlinScriptDefinitionProvider.getInstance(getProject()).findScriptDefinition(containingKtFile);
|
||||
KotlinScriptDefinitionProvider.getInstance(getProject()).findScriptDefinition(containingKtFile.getOriginalFile().getVirtualFile());
|
||||
assert kotlinScriptDefinition != null : "Should not parse a script without definition";
|
||||
return containingKtFile.getPackageFqName().child(kotlinScriptDefinition.getScriptName(this));
|
||||
}
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ class LazyScriptClassMemberScope(
|
||||
|
||||
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
|
||||
val file = scriptDescriptor.scriptInfo.script.getContainingKtFile()
|
||||
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file) ?:
|
||||
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file.originalFile.virtualFile) ?:
|
||||
throw RuntimeException("file ${file.name} is not a script")
|
||||
return scriptDefinition.getScriptParameters(scriptDescriptor).mapIndexed { index, scriptParameter ->
|
||||
ValueParameterDescriptorImpl(
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ class LazyScriptDescriptor(
|
||||
private val scriptDefinition: KotlinScriptDefinition
|
||||
by lazy {
|
||||
val file = scriptInfo.script.getContainingKtFile()
|
||||
KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file) ?:
|
||||
KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file.originalFile.virtualFile) ?:
|
||||
throw RuntimeException("file ${file.name} is not a script")
|
||||
}
|
||||
|
||||
|
||||
+5
-9
@@ -20,20 +20,16 @@ import com.intellij.openapi.components.AbstractProjectComponent
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.JDOMUtil
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.xmlb.XmlSerializer
|
||||
import com.intellij.util.xmlb.annotations.AbstractCollection
|
||||
import com.intellij.util.xmlb.annotations.Tag
|
||||
import org.jdom.Document
|
||||
import org.jdom.Element
|
||||
import org.jdom.output.Format
|
||||
import org.jdom.output.XMLOutputter
|
||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import java.io.File
|
||||
import java.io.FileWriter
|
||||
import java.util.*
|
||||
|
||||
class KotlinScriptConfigurationManager(project: Project, scriptDefinitionProvider: KotlinScriptDefinitionProvider) : AbstractProjectComponent(project) {
|
||||
@@ -98,10 +94,10 @@ class KotlinConfigurableScriptDefinition(val config: KotlinScriptConfig) : Kotli
|
||||
override fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List<Name> =
|
||||
config.superclassParamsMapping.map { Name.identifier(it) }
|
||||
|
||||
override fun isScript(file: PsiFile): Boolean =
|
||||
Regex(config.fileNameMatch).matches(file.name)
|
||||
override fun isScript(file: VirtualFile): Boolean =
|
||||
Regex(config.fileNameMatch).matches(file.name)
|
||||
|
||||
override fun getScriptName(script: KtScript): Name = Name.identifier(script.name ?: config.name)
|
||||
override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, KotlinParserDefinition.STD_SCRIPT_EXT)
|
||||
|
||||
override fun getScriptDependenciesClasspath(): List<String> = config.classpath
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.script
|
||||
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.PathUtil
|
||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -36,7 +36,7 @@ interface KotlinScriptDefinition {
|
||||
fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter>
|
||||
fun getScriptSupertypes(scriptDescriptor: ScriptDescriptor): List<KotlinType> = emptyList()
|
||||
fun getScriptParametersToPassToSuperclass(scriptDescriptor: ScriptDescriptor): List<Name> = emptyList()
|
||||
fun isScript(file: PsiFile): Boolean
|
||||
fun isScript(file: VirtualFile): Boolean
|
||||
fun getScriptName(script: KtScript): Name
|
||||
fun getScriptDependenciesClasspath(): List<String> = emptyList()
|
||||
}
|
||||
@@ -52,7 +52,7 @@ object StandardScriptDefinition : KotlinScriptDefinition {
|
||||
return ScriptNameUtil.fileNameWithExtensionStripped(script, KotlinParserDefinition.STD_SCRIPT_EXT)
|
||||
}
|
||||
|
||||
override fun isScript(file: PsiFile): Boolean {
|
||||
override fun isScript(file: VirtualFile): Boolean {
|
||||
return PathUtil.getFileExtension(file.name) == KotlinParserDefinition.STD_SCRIPT_SUFFIX
|
||||
}
|
||||
|
||||
|
||||
@@ -18,14 +18,14 @@ package org.jetbrains.kotlin.script
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
|
||||
class KotlinScriptDefinitionProvider {
|
||||
private val definitions: MutableList<KotlinScriptDefinition> = arrayListOf(StandardScriptDefinition)
|
||||
|
||||
fun findScriptDefinition(psiFile: PsiFile): KotlinScriptDefinition? = definitions.firstOrNull { it.isScript(psiFile) }
|
||||
fun findScriptDefinition(file: VirtualFile?): KotlinScriptDefinition? = file?.let { file -> definitions.firstOrNull { it.isScript(file) } }
|
||||
|
||||
fun isScript(psiFile: PsiFile): Boolean = findScriptDefinition(psiFile) != null
|
||||
fun isScript(file: VirtualFile?): Boolean = findScriptDefinition(file) != null
|
||||
|
||||
fun addScriptDefinition(scriptDefinition: KotlinScriptDefinition) {
|
||||
definitions.add(0, scriptDefinition)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.scripts
|
||||
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
@@ -26,7 +26,7 @@ import kotlin.reflect.KClass
|
||||
|
||||
abstract class BaseScriptDefinition (val extension: String) : KotlinScriptDefinition {
|
||||
override val name = "Test Kotlin Script"
|
||||
override fun isScript(file: PsiFile): Boolean = file.name.endsWith(extension)
|
||||
override fun isScript(file: VirtualFile): Boolean = file.name.endsWith(extension)
|
||||
override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, extension)
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.vfs.CharsetToolkit
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFileFactory
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl
|
||||
@@ -123,7 +123,7 @@ class KotlinConsoleRunner(
|
||||
|
||||
private val consoleScriptDefinition = object : KotlinScriptDefinition {
|
||||
override val name = "Kotlin REPL"
|
||||
override fun isScript(file: PsiFile) = file.originalFile.virtualFile == consoleView.virtualFile
|
||||
override fun isScript(file: VirtualFile) = file == consoleView.virtualFile
|
||||
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = emptyList<ScriptParameter>()
|
||||
override fun getScriptName(script: KtScript) = Name.identifier("REPL")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user