[java-support] 06/10: JSPT-95 Clean up GraalVm support code
Rod Widdowson
rdw at steadingsoftware.com
Tue May 12 15:34:20 UTC 2020
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch dev/JSPT-95
in repository java-support.
View the commit online:
http://git.shibboleth.net/view/?p=java-support.git;a=commit;h=b3b9a1501e8bf981082cda5200539e3e57756fd3
commit b3b9a1501e8bf981082cda5200539e3e57756fd3
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Apr 4 14:09:37 2020 +0100
JSPT-95 Clean up GraalVm support code
https://issues.shibboleth.net/jira/browse/JSPT-95
---
.../java/support/scripting/GraalEngine.java | 95 ++++++++++++++--------
.../java/support/scripting/GraalFactory.java | 8 +-
2 files changed, 63 insertions(+), 40 deletions(-)
diff --git a/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalEngine.java b/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalEngine.java
index 07f3a86..90362e7 100644
--- a/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalEngine.java
+++ b/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalEngine.java
@@ -19,6 +19,8 @@ package net.shibboleth.utilities.java.support.scripting;
import java.io.Reader;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
@@ -51,56 +53,77 @@ public class GraalEngine extends AbstractScriptEngine implements ScriptEngine, C
}
final Source s = Source.newBuilder("js", script, "embedded").buildLiteral();
final Value v = context.eval(s);
- if (v.isHostObject()) {
- return v.asHostObject();
- } else if (v.isProxyObject()) {
- return v.asProxyObject();
- }
- return v.as(Object.class);
+ return processValue(v);
} catch (final RuntimeException e) {
throw new ScriptException(e);
}
}
/** {@inheritDoc} */
- public CompiledScript compile(String script) throws ScriptException {
+ public CompiledScript compile(final String script) throws ScriptException {
- final ScriptEngine parent = this;
- return new CompiledScript() {
- final Source source = Source.newBuilder("js", script, "embedded").buildLiteral();
+ return new GraalVMCompiledScript(script);
+ }
- public ScriptEngine getEngine() {
- return parent;
- }
+ /** Convert the output from {@link Context#eval(String, CharSequence)} or
+ * {@link Context#eval(String, CharSequence)} into a java {@link Object}.
+ * @param value what to consider
+ * @return The output
+ */
+ @Nullable protected static Object processValue(@Nonnull final Value value) {
+ if (value.isNull()) {
+ return null;
+ } else if (value.isHostObject()) {
+ return value.asHostObject();
+ } else if (value.isProxyObject()) {
+ return value.asProxyObject();
+ } else {
+ return value.as(Object.class);
+ }
+ }
+
+ private class GraalVMCompiledScript extends CompiledScript {
+
+ /** The compiled source. */
+ private final Source source;
- public Object eval(ScriptContext scriptContext) throws ScriptException {
-
- try (final Context context = Context.newBuilder().allowExperimentalOptions(true).
- option("js.nashorn-compat", "true").
- allowAllAccess(true).
- build()) {
-
- final Bindings scriptBindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
- final Value bindings = context.getBindings("js");
- for (final String name: scriptBindings.keySet()) {
- bindings.putMember(name, scriptBindings.get(name));
- }
- final Value v = context.eval(source);
- if (v.isHostObject()) {
- return v.asHostObject();
- } else if (v.isProxyObject()) {
- return v.asProxyObject();
- }
- return v.as(Object.class);
- } catch (final RuntimeException e) {
- throw new ScriptException(e);
+ /**
+ * Constructor.
+ *
+ * @param script the script (as text)
+ */
+ protected GraalVMCompiledScript(final String script) {
+ source = Source.newBuilder("js", script, "embedded").buildLiteral();
+ }
+
+ /** {@inheritDoc} */
+ public ScriptEngine getEngine() {
+ return GraalEngine.this;
+ }
+
+ /** {@inheritDoc} */
+ public Object eval(final ScriptContext scriptContext) throws ScriptException {
+
+ try (final Context context = Context.newBuilder().allowExperimentalOptions(true).
+ option("js.nashorn-compat", "true").
+ allowAllAccess(true).
+ build()) {
+
+ final Bindings scriptBindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+ final Value bindings = context.getBindings("js");
+ for (final String name: scriptBindings.keySet()) {
+ bindings.putMember(name, scriptBindings.get(name));
}
+ final Value v = context.eval(source);
+ return processValue(v);
+ } catch (final RuntimeException e) {
+ throw new ScriptException(e);
}
- };
+ }
}
/** {@inheritDoc} */
- public CompiledScript compile(Reader script) throws ScriptException {
+ public CompiledScript compile(final Reader script) throws ScriptException {
throw new ScriptException("Cannot compile from a reader");
}
}
diff --git a/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalFactory.java b/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalFactory.java
index 83f406c..59e6069 100644
--- a/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalFactory.java
+++ b/src/test/java/net/shibboleth/utilities/java/support/scripting/GraalFactory.java
@@ -68,22 +68,22 @@ public class GraalFactory implements ScriptEngineFactory {
}
/** {@inheritDoc} */
- public Object getParameter(String key) {
+ public Object getParameter(final String key) {
throw new RuntimeScriptingException("Unsupported method getMethodCallSyntax");
}
/** {@inheritDoc} */
- public String getMethodCallSyntax(String obj, String m, String... args) {
+ public String getMethodCallSyntax(final String obj, final String m, final String... args) {
throw new RuntimeScriptingException("Unsupported method getMethodCallSyntax");
}
/** {@inheritDoc} */
- public String getOutputStatement(String toDisplay) {
+ public String getOutputStatement(final String toDisplay) {
throw new RuntimeScriptingException("Unsupported method getMethodCallSyntax");
}
/** {@inheritDoc} */
- public String getProgram(String... statements) {
+ public String getProgram(final String... statements) {
throw new RuntimeScriptingException("Unsupported method getMethodCallSyntax");
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list