Improve class name generation for scripts and REPL snippets
- allow to override default name/scheme - implement host/engine specific names for jsr223 to avoid classloading clashes (also fix "eval in eval" test)
This commit is contained in:
+4
@@ -31,6 +31,7 @@ abstract class ScriptDefinition : UserDataHolderBase() {
|
||||
abstract fun isScript(file: File): Boolean
|
||||
abstract val fileExtension: String
|
||||
abstract val name: String
|
||||
open val defaultClassName: String = "Script"
|
||||
// TODO: used in settings, find out the reason and refactor accordingly
|
||||
abstract val definitionId: String
|
||||
|
||||
@@ -138,6 +139,9 @@ abstract class ScriptDefinition : UserDataHolderBase() {
|
||||
compilationConfiguration[ScriptCompilationConfiguration.displayName]?.takeIf { it.isNotBlank() }
|
||||
?: compilationConfiguration[ScriptCompilationConfiguration.baseClass]!!.typeName.substringAfterLast('.')
|
||||
|
||||
override val defaultClassName: String
|
||||
get() = compilationConfiguration[ScriptCompilationConfiguration.defaultIdentifier] ?: super.defaultClassName
|
||||
|
||||
override val definitionId: String get() = compilationConfiguration[ScriptCompilationConfiguration.baseClass]!!.typeName
|
||||
|
||||
override val contextClassLoader: ClassLoader? by lazy {
|
||||
|
||||
+1
-1
@@ -291,7 +291,7 @@ fun SourceCode.getVirtualFile(definition: ScriptDefinition): VirtualFile {
|
||||
val vFile = LocalFileSystem.getInstance().findFileByIoFile(file)
|
||||
if (vFile != null) return vFile
|
||||
}
|
||||
val scriptName = withCorrectExtension(name ?: "script", definition.fileExtension)
|
||||
val scriptName = withCorrectExtension(name ?: definition.defaultClassName, definition.fileExtension)
|
||||
val scriptPath = when (this) {
|
||||
is FileScriptSource -> file.path
|
||||
is ExternalSourceCode -> externalLocation.toString()
|
||||
|
||||
Reference in New Issue
Block a user