diff --git a/build.gradle.kts b/build.gradle.kts index 0ae34b47..a647aadf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -84,7 +84,6 @@ allprojects { dependencies { // Kotlin implementation(kotlin("stdlib", version = "1.6.21")) - implementation(kotlin("scripting-jsr223", version = "1.6.21")) // Included in spigot jar, no need to move to implementation compileOnly("org.jetbrains:annotations:23.0.0") diff --git a/eco-api/src/main/java/com/willfp/eco/util/ScriptUtils.java b/eco-api/src/main/java/com/willfp/eco/util/ScriptUtils.java deleted file mode 100644 index 5e398cbf..00000000 --- a/eco-api/src/main/java/com/willfp/eco/util/ScriptUtils.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.willfp.eco.util; - -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.script.Bindings; -import javax.script.Compilable; -import javax.script.CompiledScript; -import javax.script.ScriptContext; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Consumer; - -/** - * Utilities / API methods for kotlin scripts. - */ -public final class ScriptUtils { - /** - * The cache of compiled scripts. - */ - private static final Cache COMPILED_SCRIPTS = Caffeine.newBuilder() - .build(); - - /** - * Empty (dummy) compiled script. - */ - private static final CompiledScript EMPTY_SCRIPT = new CompiledScript() { - @Override - public Object eval(@NotNull final ScriptContext context) { - return null; - } - - @Override - public ScriptEngine getEngine() { - return ScriptUtils.getEngine(); - } - }; - - /** - * Evaluate a script. - * - * @param script The script. - * @return The return value of the script. - */ - @Nullable - public static Object eval(@NotNull final String script) { - return eval(script, (x) -> { - // Do nothing. - }); - } - - /** - * Evaluate a script. - * - * @param script The script. - * @param bindingsFactory The consumer to create bindings. - * @return The return value of the script. - */ - @Nullable - public static Object eval(@NotNull final String script, - @NotNull final Consumer bindingsFactory) { - Bindings toHash = getEngine().createBindings(); - bindingsFactory.accept(toHash); - Map bindingsMap = new HashMap<>(toHash); - - try { - return COMPILED_SCRIPTS.get(new ScriptToCompile(script, bindingsMap), (it) -> { - try { - var engine = getEngine(); - Bindings bindings = engine.createBindings(); - bindingsFactory.accept(bindings); - engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE); - return engine.compile(it.script); - } catch (ScriptException e) { - e.printStackTrace(); - return EMPTY_SCRIPT; - } - }).eval(); - } catch (ScriptException e) { - e.printStackTrace(); - return null; - } - } - - /** - * Get new engine instance. - * - * @param Intersection type. - * @return The engine. - */ - @SuppressWarnings("unchecked") - private static T getEngine() { - return (T) new ScriptEngineManager().getEngineByExtension("kts"); - } - - /** - * Metadata to compile a script. - * - * @param script The script. - * @param bindings The bindings. - */ - private record ScriptToCompile(@NotNull String script, - @NotNull Map bindings) { - - } - - private ScriptUtils() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } -} diff --git a/eco-api/src/test/java/ScriptUtilsTest.java b/eco-api/src/test/java/ScriptUtilsTest.java deleted file mode 100644 index 6370e5a2..00000000 --- a/eco-api/src/test/java/ScriptUtilsTest.java +++ /dev/null @@ -1,40 +0,0 @@ -import com.willfp.eco.util.ScriptUtils; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class ScriptUtilsTest { - @Test - public void testScriptUtils() { - Assertions.assertEquals( - "Test", - ScriptUtils.eval("\"Test\"") - ); - Assertions.assertNull(ScriptUtils.eval("empasd___a !&&b1923")); - Assertions.assertEquals( - 10, - ScriptUtils.eval("8 + 2") - ); - Assertions.assertEquals( - "XVIII", - ScriptUtils.eval("com.willfp.eco.util.NumberUtils.toNumeral(18)") - ); - } - - @Test - public void testBindings() { - Assertions.assertEquals( - 10, - ScriptUtils.eval("x + y", (bindings) -> { - bindings.put("x", 2); - bindings.put("y", 8); - }) - ); - Assertions.assertEquals( - 12, - ScriptUtils.eval("x + y", (bindings) -> { - bindings.put("x", 3); - bindings.put("y", 9); - }) - ); - } -}