TINKERPOP=1562 Loaded "gremlin" imports in the scriptengines Rather than load them in the DefaultGremlinScriptEngineManager it seemed better to get them loaded in the engines themselves that way if someone opted to construct the GremlinScriptEngine directly the imports would be present.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9d0d1abe Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9d0d1abe Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9d0d1abe Branch: refs/heads/TINKERPOP-1562 Commit: 9d0d1abe044e25e256ae3a852cf1452144abcfd7 Parents: d6fcb92 Author: Stephen Mallette <sp...@genoprime.com> Authored: Mon Nov 28 16:51:12 2016 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Dec 1 06:41:43 2016 -0500 ---------------------------------------------------------------------- .../tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java | 3 ++- .../jsr223/DefaultGremlinScriptEngineManager.java | 3 --- .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java | 8 ++++++-- .../gremlin/python/jsr223/GremlinJythonScriptEngine.java | 11 ++++++----- .../gremlin/jsr223/GremlinEnabledScriptEngineTest.java | 5 ++--- 5 files changed, 16 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9d0d1abe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java index d579691..a3063cf 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java @@ -24,7 +24,8 @@ import java.util.Optional; /** * This module is required for a {@code ScriptEngine} to be Gremlin-enabled. This {@link GremlinPlugin} is not enabled - * for the {@code ServiceLoader}. It is designed to be instantiated manually. + * for the {@code ServiceLoader}. It is designed to be instantiated manually and compliant {@link GremlinScriptEngine} + * instances will automatically install it by default when created. * * @author Stephen Mallette (http://stephen.genoprime.com) */ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9d0d1abe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java index 1484f90..34ef995 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java @@ -404,9 +404,6 @@ public class DefaultGremlinScriptEngineManager implements GremlinScriptEngineMan } private void initEngines(final ClassLoader loader) { - // always need this module for a scriptengine to be "Gremlin-enabled" - plugins.add(CoreGremlinPlugin.instance()); - Iterator<GremlinScriptEngineFactory> itty; try { final ServiceLoader<GremlinScriptEngineFactory> sl = AccessController.doPrivileged( http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9d0d1abe/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java ---------------------------------------------------------------------- diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java index 3ce400e..264587a 100644 --- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java +++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java @@ -38,6 +38,7 @@ import org.apache.tinkerpop.gremlin.groovy.loaders.GremlinLoader; import org.apache.tinkerpop.gremlin.groovy.plugin.Artifact; import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin; import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPluginException; +import org.apache.tinkerpop.gremlin.jsr223.CoreGremlinPlugin; import org.apache.tinkerpop.gremlin.jsr223.Customizer; import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine; import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineFactory; @@ -184,7 +185,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl * Creates a new instance using the {@link DefaultImportCustomizerProvider}. */ public GremlinGroovyScriptEngine() { - this((CompilerCustomizerProvider) new DefaultImportCustomizerProvider()); + this(new Customizer[0]); } /** @@ -196,7 +197,10 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl } public GremlinGroovyScriptEngine(final Customizer... customizers) { - final List<Customizer> listOfCustomizers = Arrays.asList(customizers); + final List<Customizer> listOfCustomizers = new ArrayList<>(Arrays.asList(customizers)); + + // always need this plugin for a scriptengine to be "Gremlin-enabled" + CoreGremlinPlugin.instance().getCustomizers("gremlin-groovy").ifPresent(c -> listOfCustomizers.addAll(Arrays.asList(c))); GremlinLoader.load(); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9d0d1abe/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java index 1b95a02..1a4b57a 100644 --- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java +++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/GremlinJythonScriptEngine.java @@ -19,6 +19,7 @@ package org.apache.tinkerpop.gremlin.python.jsr223; +import org.apache.tinkerpop.gremlin.jsr223.CoreGremlinPlugin; import org.apache.tinkerpop.gremlin.jsr223.Customizer; import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine; import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineFactory; @@ -27,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Bytecode; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.util.CoreImports; import org.python.jsr223.PyScriptEngine; import org.python.jsr223.PyScriptEngineFactory; @@ -37,12 +37,10 @@ import javax.script.ScriptContext; import javax.script.ScriptException; import java.io.Reader; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; /** @@ -82,7 +80,10 @@ public class GremlinJythonScriptEngine implements GremlinScriptEngine { public GremlinJythonScriptEngine(final Customizer... customizers) { this.pyScriptEngine = (PyScriptEngine) new PyScriptEngineFactory().getScriptEngine(); - final List<Customizer> listOfCustomizers = Arrays.asList(customizers); + final List<Customizer> listOfCustomizers = new ArrayList<>(Arrays.asList(customizers)); + + // always need this plugin for a scriptengine to be "Gremlin-enabled" + CoreGremlinPlugin.instance().getCustomizers("gremlin-groovy").ifPresent(c -> listOfCustomizers.addAll(Arrays.asList(c))); final List<ImportCustomizer> importCustomizers = listOfCustomizers.stream() .filter(p -> p instanceof ImportCustomizer) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9d0d1abe/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java index 8fa70b0..5a880f8 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java @@ -82,12 +82,11 @@ public class GremlinEnabledScriptEngineTest { } @Test - public void shouldReturnOneCustomizers() { - // just returns the core plugin as the other assigned plugin doesn't match the tested engine + public void shouldReturnNoCustomizers() { final GremlinScriptEngineManager mgr = new DefaultGremlinScriptEngineManager(); mgr.addPlugin(ImportGremlinPlugin.build() .classImports(java.awt.Color.class) .appliesTo(Collections.singletonList("fake-script-engine")).create()); - assertEquals(1, mgr.getCustomizers(ENGINE_TO_TEST).size()); + assertEquals(0, mgr.getCustomizers(ENGINE_TO_TEST).size()); } }