From c98705edfcc199a04b6cb87477196de293698271 Mon Sep 17 00:00:00 2001 From: iGabyTM Date: Tue, 17 Jan 2023 21:30:05 +0200 Subject: [PATCH] fix for #73 --- build.gradle | 2 ++ .../evaluator/NashornScriptEvaluator.java | 17 ++++++++--------- .../NashornScriptEvaluatorFactory.java | 9 +++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 5379ecf..7a5ad83 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,8 @@ allprojects { group = 'com.extendedclip.papi.expansion.javascript' version = '2.1.2' description = 'PAPI-Expansion-Javascript' + + apply(plugin: 'java') } repositories { diff --git a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluator.java b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluator.java index 7b56539..80c75fe 100644 --- a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluator.java +++ b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluator.java @@ -1,7 +1,5 @@ package com.extendedclip.papi.expansion.javascript.evaluator; -import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory; - import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; @@ -9,21 +7,22 @@ import java.util.Map; public final class NashornScriptEvaluator implements ScriptEvaluator { - private final NashornScriptEngineFactory scriptEngineFactory; + + private final ScriptEngine scriptEngine; private final Map bindings; - public NashornScriptEvaluator(final NashornScriptEngineFactory scriptEngineFactory, final Map bindings) { - this.scriptEngineFactory = scriptEngineFactory; + public NashornScriptEvaluator(final ScriptEngine scriptEngine, final Map bindings) { + this.scriptEngine = scriptEngine; this.bindings = bindings; } @Override public Object execute(final Map additionalBindings, final String script) throws EvaluatorException, ScriptException { - final ScriptEngine engine = scriptEngineFactory.getScriptEngine("--no-java"); - final Bindings globalBindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); + final Bindings globalBindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE); globalBindings.putAll(bindings); globalBindings.putAll(additionalBindings); - engine.setBindings(globalBindings, ScriptContext.GLOBAL_SCOPE); - return engine.eval(script); + scriptEngine.setBindings(globalBindings, ScriptContext.ENGINE_SCOPE); + return scriptEngine.eval(script); } + } diff --git a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java index 650b201..2e93601 100644 --- a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java +++ b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java @@ -3,6 +3,7 @@ import com.extendedclip.papi.expansion.javascript.evaluator.util.InjectionUtil; import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory; +import javax.script.ScriptEngine; import java.io.IOException; import java.net.URISyntaxException; import java.security.NoSuchAlgorithmException; @@ -17,16 +18,16 @@ public final class NashornScriptEvaluatorFactory implements ScriptEvaluatorFacto "asm-util-9.2.isolated-jar", "asm-9.2.isolated-jar" ); - private final NashornScriptEngineFactory engineFactory; + + private final ThreadLocal engines; private NashornScriptEvaluatorFactory(final NashornScriptEngineFactory engineFactory) { - this.engineFactory = engineFactory; + this.engines = ThreadLocal.withInitial(() -> engineFactory.getScriptEngine("--no-java")); } - @Override public ScriptEvaluator create(final Map bindings) { - return new NashornScriptEvaluator(engineFactory, bindings); + return new NashornScriptEvaluator(engines.get(), bindings); } public static ScriptEvaluatorFactory create() throws URISyntaxException, ReflectiveOperationException, NoSuchAlgorithmException, IOException {