@@ -4,29 +4,22 @@ import java.io.File
4
4
import kotlin.reflect.KClass
5
5
import kotlin.script.experimental.api.EvaluationResult
6
6
import kotlin.script.experimental.api.ResultWithDiagnostics
7
+ import kotlin.script.experimental.api.ScriptAcceptedLocation
7
8
import kotlin.script.experimental.api.ScriptCompilationConfiguration
8
9
import kotlin.script.experimental.api.ScriptDiagnostic
9
10
import kotlin.script.experimental.api.ScriptEvaluationConfiguration
10
11
import kotlin.script.experimental.api.SourceCode
12
+ import kotlin.script.experimental.api.acceptedLocations
11
13
import kotlin.script.experimental.api.asSuccess
12
- import kotlin.script.experimental.api.compilationConfiguration
13
14
import kotlin.script.experimental.api.compilerOptions
14
15
import kotlin.script.experimental.api.defaultImports
15
- import kotlin.script.experimental.api.hostConfiguration
16
+ import kotlin.script.experimental.api.ide
16
17
import kotlin.script.experimental.api.onFailure
17
18
import kotlin.script.experimental.api.onSuccess
18
- import kotlin.script.experimental.api.providedProperties
19
- import kotlin.script.experimental.api.refineConfigurationBeforeEvaluate
20
- import kotlin.script.experimental.api.scriptExecutionWrapper
21
19
import kotlin.script.experimental.host.toScriptSource
22
20
import kotlin.script.experimental.jvm.baseClassLoader
23
- import kotlin.script.experimental.jvm.dependenciesFromClassContext
24
- import kotlin.script.experimental.jvm.dependenciesFromClassloader
25
21
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
26
22
import kotlin.script.experimental.jvm.jvm
27
- import kotlin.script.experimental.jvm.loadDependencies
28
- import kotlin.script.experimental.jvm.util.classpathFromClass
29
- import kotlin.script.experimental.jvm.util.classpathFromClassloader
30
23
import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
31
24
import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
32
25
import kotlin.script.experimental.jvmhost.createJvmEvaluationConfigurationFromTemplate
@@ -53,50 +46,7 @@ interface KtScriptPluginContainer<C, L> {
53
46
*/
54
47
class Script (
55
48
private val script : String ,
56
- private val defaultPlatformImports : List <String >,
57
- private val scriptContainer : KtScriptPluginContainer <* , * >
58
49
) {
59
- private val defaultImports: List <String > = listOf (
60
- // Kotlin Packages
61
- " kotlin.reflect.*" ,
62
- " kotlin.reflect.jvm.*" ,
63
- // Kyori
64
- " net.kyori.adventure.text.*" ,
65
- // Plugin
66
- " me.zodd.*" ,
67
- )
68
-
69
- private fun mergeImports (): List <String > {
70
- val imports = mutableListOf<String >()
71
- imports.addAll(defaultImports)
72
- imports.addAll(defaultPlatformImports)
73
- return imports
74
- }
75
-
76
- private val configuration = createJvmCompilationConfigurationFromTemplate<PluginScript > {
77
- compilerOptions(" -jvm-target=21" )
78
- defaultImports(* mergeImports().toTypedArray())
79
- jvm {
80
-
81
- dependenciesFromCurrentContext(wholeClasspath = true )
82
-
83
- // https://youtrack.jetbrains.com/issue/KT-57907
84
- compilerOptions.append(" -Xadd-modules=ALL-MODULE-PATH" )
85
- }
86
- }
87
-
88
- private val evalConfig = createJvmEvaluationConfigurationFromTemplate<PluginScript > {
89
-
90
- // scriptExecutionWrapper {
91
- // val api = scriptContainer
92
- // }
93
-
94
- }
95
-
96
- fun eval (): ResultWithDiagnostics <EvaluationResult > {
97
- return BasicJvmScriptingHost ().eval(compile(), configuration, evalConfig)
98
- }
99
-
100
50
fun eval (
101
51
configuration : ScriptCompilationConfiguration ,
102
52
evalConfig : ScriptEvaluationConfiguration
@@ -117,36 +67,47 @@ object ScriptLoader {
117
67
private val scriptFileDir = File (SCRIPT_DIR )
118
68
119
69
/* *
120
- * defaultPlatformImports should be a list of common imports for scripts to use
121
- * This will allow scripts to omit these imports
70
+ * @param defaultImports A list of default imports to provide to scripts
71
+ * @param classloaderClass The class instance to share the classloader to scripts
122
72
*/
123
- fun loadScripts (container : KtScriptPluginContainer <* , * >, defaultPlatformImports : List <String >) {
124
- scriptFileDir.mkdirs()
125
- scriptFileDir.listFiles()?.forEach { file ->
126
- ScriptCoreLogger .logger.info(" Loading script : ${file.name} ..." )
127
- Script (file.readText(), defaultPlatformImports, container).eval().logResult(file.name)
128
- }
129
- }
130
-
131
73
fun loadScripts (
132
- container : KtScriptPluginContainer <* , * >,
133
- defaultPlatformImports : List <String >,
134
- configuration : ScriptCompilationConfiguration ,
135
- evalConfig : ScriptEvaluationConfiguration ,
74
+ defaultImports : List <String >,
75
+ classloaderClass : KClass <* >,
136
76
) {
137
77
scriptFileDir.mkdirs()
138
78
scriptFileDir.listFiles()?.forEach { file ->
139
79
ScriptCoreLogger .logger.info(" Loading script : ${file.name} ..." )
140
- Script (file.readText(), defaultPlatformImports, container).eval(configuration, evalConfig)
80
+ Script (file.readText()).eval(
81
+ configurationConfig(defaultImports),
82
+ evaluationConfig(classloaderClass)
83
+ )
141
84
.logResult(file.name)
142
85
}
143
86
}
144
87
88
+ private fun evaluationConfig (classloaderClass : KClass <* >) =
89
+ createJvmEvaluationConfigurationFromTemplate<PluginScript > {
90
+ jvm {
91
+ baseClassLoader.put(classloaderClass.java.classLoader)
92
+ }
93
+ }
94
+
95
+ private fun configurationConfig (imports : List <String >) =
96
+ createJvmCompilationConfigurationFromTemplate<PluginScript > {
97
+ ide.acceptedLocations(ScriptAcceptedLocation .Everywhere )
98
+ compilerOptions(" -jvm-target=21" )
99
+ defaultImports(imports)
100
+ jvm {
101
+ dependenciesFromCurrentContext(wholeClasspath = true )
102
+ // https://youtrack.jetbrains.com/issue/KT-57907
103
+ compilerOptions.append(" -Xadd-modules=ALL-MODULE-PATH" )
104
+ }
105
+ }
106
+
145
107
private fun ResultWithDiagnostics<EvaluationResult>.logResult (name : String ) {
146
108
onFailure {
147
109
LogInfo (name, it.reports).printLog()
148
110
}.onSuccess {
149
- ScriptCoreLogger .logger.info(" Script: $name successfully loaded! - {${it} }" )
150
111
asSuccess()
151
112
}
152
113
}
0 commit comments