1
1
package me.zodd
2
2
3
- import org.apache.logging.log4j.Logger
4
- import org.spongepowered.plugin.PluginContainer
5
3
import java.io.File
4
+ import kotlin.reflect.KClass
6
5
import kotlin.script.experimental.api.EvaluationResult
7
6
import kotlin.script.experimental.api.ResultWithDiagnostics
7
+ import kotlin.script.experimental.api.ScriptCompilationConfiguration
8
8
import kotlin.script.experimental.api.ScriptDiagnostic
9
+ import kotlin.script.experimental.api.ScriptEvaluationConfiguration
9
10
import kotlin.script.experimental.api.SourceCode
10
11
import kotlin.script.experimental.api.asSuccess
12
+ import kotlin.script.experimental.api.compilationConfiguration
11
13
import kotlin.script.experimental.api.compilerOptions
12
14
import kotlin.script.experimental.api.defaultImports
15
+ import kotlin.script.experimental.api.hostConfiguration
13
16
import kotlin.script.experimental.api.onFailure
14
17
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
15
21
import kotlin.script.experimental.host.toScriptSource
22
+ import kotlin.script.experimental.jvm.baseClassLoader
23
+ import kotlin.script.experimental.jvm.dependenciesFromClassContext
24
+ import kotlin.script.experimental.jvm.dependenciesFromClassloader
16
25
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
17
26
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
18
30
import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
19
31
import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate
32
+ import kotlin.script.experimental.jvmhost.createJvmEvaluationConfigurationFromTemplate
20
33
21
34
// todo: Find a better logging solution
22
35
// This only affects loading, plugins use their platforms logger.
@@ -30,14 +43,19 @@ object ScriptCoreLogger {
30
43
interface KtScriptPluginContainer <C , L > {
31
44
// The platforms container
32
45
val container: C
46
+
33
47
// The logger the Platform will use
34
48
val logger: L
35
49
}
36
50
37
51
/* *
38
52
* Represents a single Script File
39
53
*/
40
- class Script (private val script : String , private val defaultPlatformImports : List <String >) {
54
+ class Script (
55
+ private val script : String ,
56
+ private val defaultPlatformImports : List <String >,
57
+ private val scriptContainer : KtScriptPluginContainer <* , * >
58
+ ) {
41
59
private val defaultImports: List <String > = listOf (
42
60
// Kotlin Packages
43
61
" kotlin.reflect.*" ,
@@ -56,19 +74,34 @@ class Script(private val script: String, private val defaultPlatformImports: Lis
56
74
}
57
75
58
76
private val configuration = createJvmCompilationConfigurationFromTemplate<PluginScript > {
59
- compilerOptions(" -jvm-target" , " 17 " )
77
+ compilerOptions(" -jvm-target=21 " )
60
78
defaultImports(* mergeImports().toTypedArray())
61
79
jvm {
62
- dependenciesFromCurrentContext(
63
- wholeClasspath = true
64
- )
80
+
81
+ dependenciesFromCurrentContext( wholeClasspath = true )
82
+
65
83
// https://youtrack.jetbrains.com/issue/KT-57907
66
84
compilerOptions.append(" -Xadd-modules=ALL-MODULE-PATH" )
67
85
}
68
86
}
69
87
88
+ private val evalConfig = createJvmEvaluationConfigurationFromTemplate<PluginScript > {
89
+
90
+ // scriptExecutionWrapper {
91
+ // val api = scriptContainer
92
+ // }
93
+
94
+ }
95
+
70
96
fun eval (): ResultWithDiagnostics <EvaluationResult > {
71
- return BasicJvmScriptingHost ().eval(compile(), configuration, null )
97
+ return BasicJvmScriptingHost ().eval(compile(), configuration, evalConfig)
98
+ }
99
+
100
+ fun eval (
101
+ configuration : ScriptCompilationConfiguration ,
102
+ evalConfig : ScriptEvaluationConfiguration
103
+ ): ResultWithDiagnostics <EvaluationResult > {
104
+ return BasicJvmScriptingHost ().eval(compile(), configuration, evalConfig)
72
105
}
73
106
74
107
private fun compile (): SourceCode {
@@ -87,19 +120,33 @@ object ScriptLoader {
87
120
* defaultPlatformImports should be a list of common imports for scripts to use
88
121
* This will allow scripts to omit these imports
89
122
*/
90
- fun loadScripts (defaultPlatformImports : List <String >) {
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
+ fun loadScripts (
132
+ container : KtScriptPluginContainer <* , * >,
133
+ defaultPlatformImports : List <String >,
134
+ configuration : ScriptCompilationConfiguration ,
135
+ evalConfig : ScriptEvaluationConfiguration ,
136
+ ) {
91
137
scriptFileDir.mkdirs()
92
138
scriptFileDir.listFiles()?.forEach { file ->
93
139
ScriptCoreLogger .logger.info(" Loading script : ${file.name} ..." )
94
- Script (file.readText(),defaultPlatformImports).eval().logResult(file.name)
140
+ Script (file.readText(), defaultPlatformImports, container).eval(configuration, evalConfig)
141
+ .logResult(file.name)
95
142
}
96
143
}
97
144
98
145
private fun ResultWithDiagnostics<EvaluationResult>.logResult (name : String ) {
99
146
onFailure {
100
147
LogInfo (name, it.reports).printLog()
101
148
}.onSuccess {
102
- ScriptCoreLogger .logger.info(" Script: $name successfully loaded!" )
149
+ ScriptCoreLogger .logger.info(" Script: $name successfully loaded! - { ${it} } " )
103
150
asSuccess()
104
151
}
105
152
}
0 commit comments