3030
3131package org .scijava .plugins .scripting .kotlin ;
3232
33- import java .util .Arrays ;
34- import java .util .List ;
35-
36- import javax .script .ScriptEngine ;
37-
38- import org .jetbrains .kotlin .script .jsr223 .KotlinJsr223JvmLocalScriptEngineFactory ;
33+ import org .jetbrains .kotlin .cli .common .repl .KotlinJsr223JvmScriptEngineFactoryBase ;
3934import org .scijava .plugin .Plugin ;
4035import org .scijava .script .AdaptedScriptLanguage ;
4136import org .scijava .script .ScriptLanguage ;
4237
38+ import javax .script .*;
39+ import java .io .Reader ;
40+ import java .util .Arrays ;
41+ import java .util .List ;
42+
4343/**
4444 * A SciJava {@link ScriptLanguage} for Kotlin.
4545 *
5050public class KotlinScriptLanguage extends AdaptedScriptLanguage {
5151
5252 public KotlinScriptLanguage () {
53- super (new KotlinJsr223JvmLocalScriptEngineFactory ());
53+ super (new MyScriptEngineFactory ());
5454 }
5555
5656 @ Override
@@ -64,4 +64,90 @@ public List<String> getExtensions() {
6464 // NB: The wrapped ScriptEngineFactory does not include .kt in its list.
6565 return Arrays .asList ("kt" , "kts" );
6666 }
67+
68+ public static class MyScriptEngineFactory extends KotlinJsr223JvmScriptEngineFactoryBase {
69+ @ Override
70+ public ScriptEngine getScriptEngine () {
71+ return new SynchronizedScriptEngine (new ScriptEngineManager ().getEngineByExtension ("kts" ));
72+ }
73+ }
74+
75+ public static class SynchronizedScriptEngine implements ScriptEngine {
76+
77+ private final ScriptEngine delegate ;
78+
79+ public SynchronizedScriptEngine (final ScriptEngine delegate ) {
80+ this .delegate = delegate ;
81+ }
82+
83+ @ Override
84+ public synchronized Object eval (String s , ScriptContext scriptContext ) throws ScriptException {
85+ return delegate .eval (s , scriptContext );
86+ }
87+
88+ @ Override
89+ public synchronized Object eval (Reader reader , ScriptContext scriptContext ) throws ScriptException {
90+ return delegate .eval (reader , scriptContext );
91+ }
92+
93+ @ Override
94+ public synchronized Object eval (String s ) throws ScriptException {
95+ return delegate .eval (s );
96+ }
97+
98+ @ Override
99+ public synchronized Object eval (Reader reader ) throws ScriptException {
100+ return delegate .eval (reader );
101+ }
102+
103+ @ Override
104+ public synchronized Object eval (String s , Bindings bindings ) throws ScriptException {
105+ return delegate .eval (s , bindings );
106+ }
107+
108+ @ Override
109+ public synchronized Object eval (Reader reader , Bindings bindings ) throws ScriptException {
110+ return delegate .eval (reader , bindings );
111+ }
112+
113+ @ Override
114+ public synchronized void put (String s , Object o ) {
115+ delegate .put (s , o );
116+ }
117+
118+ @ Override
119+ public synchronized Object get (String s ) {
120+ return delegate .get (s );
121+ }
122+
123+ @ Override
124+ public synchronized Bindings getBindings (int i ) {
125+ return delegate .getBindings (i );
126+ }
127+
128+ @ Override
129+ public synchronized void setBindings (Bindings bindings , int i ) {
130+ delegate .setBindings (bindings , i );
131+ }
132+
133+ @ Override
134+ public synchronized Bindings createBindings () {
135+ return delegate .createBindings ();
136+ }
137+
138+ @ Override
139+ public synchronized ScriptContext getContext () {
140+ return delegate .getContext ();
141+ }
142+
143+ @ Override
144+ public synchronized void setContext (ScriptContext scriptContext ) {
145+ delegate .setContext (scriptContext );
146+ }
147+
148+ @ Override
149+ public synchronized ScriptEngineFactory getFactory () {
150+ return delegate .getFactory ();
151+ }
152+ }
67153}
0 commit comments