You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/12/02 11:33:07 UTC
[47/50] tinkerpop git commit: TINKERPOP-1562 Make all groovy
customizer providers straight Customizer instances
TINKERPOP-1562 Make all groovy customizer providers straight Customizer instances
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a82c56fa
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a82c56fa
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a82c56fa
Branch: refs/heads/TINKERPOP-1562
Commit: a82c56fad2500f49da265466d5e23f345749d348
Parents: 00ccf0f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Nov 30 18:43:13 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Dec 2 06:31:51 2016 -0500
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../tinkerpop/gremlin/util/CoreImports.java | 34 +++++--
.../jsr223/CompileStaticGroovyCustomizer.java | 60 ++++++++++++
.../jsr223/ConfigurationGroovyCustomizer.java | 82 +++++++++++++++++
.../jsr223/CustomizerProviderCustomizer.java | 40 --------
.../jsr223/GremlinGroovyScriptEngine.java | 97 ++++++++++----------
.../jsr223/GroovyCompilerGremlinPlugin.java | 18 ++--
.../gremlin/groovy/jsr223/GroovyCustomizer.java | 33 +++++++
.../groovy/jsr223/ImportGroovyCustomizer.java | 66 +++++++++++++
.../jsr223/InterpreterModeGroovyCustomizer.java | 36 ++++++++
.../jsr223/ThreadInterruptGroovyCustomizer.java | 35 +++++++
.../jsr223/TimedInterruptGroovyCustomizer.java | 62 +++++++++++++
.../jsr223/TimedInterruptTimeoutException.java | 38 ++++++++
.../jsr223/TypeCheckedGroovyCustomizer.java | 65 +++++++++++++
.../CompileStaticCustomizerProvider.java | 2 +
.../ConfigurationCustomizerProvider.java | 2 +
.../InterpreterModeCustomizerProvider.java | 4 +
.../ThreadInterruptCustomizerProvider.java | 2 +
.../TimedInterruptCustomizerProvider.java | 2 +
.../TimedInterruptTimeoutException.java | 4 +
.../TypeCheckedCustomizerProvider.java | 2 +
.../VariableIdentificationCustomizer.java | 2 +
...mlinGroovyScriptEngineCompileStaticTest.java | 20 ++--
.../GremlinGroovyScriptEngineConfigTest.java | 5 +-
.../jsr223/GremlinGroovyScriptEngineTest.java | 6 +-
...inGroovyScriptEngineThreadInterruptTest.java | 2 +-
...linGroovyScriptEngineTimedInterruptTest.java | 22 ++---
...remlinGroovyScriptEngineTypeCheckedTest.java | 18 ++--
.../jsr223/GroovyCompilerGremlinPluginTest.java | 14 +--
.../server/op/AbstractEvalOpProcessor.java | 5 +
30 files changed, 625 insertions(+), 154 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ebcc318..b4ba2a6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -46,6 +46,7 @@ TinkerPop 3.2.4 (Release Date: NOT OFFICIALLY RELEASED YET)
* Fixed a `NoSuchElementException` bug with `GroupXXXStep` where if the reduced `TraverserSet` is empty, don't add the key/value.
* Fixed a `NullPointerException` bug with profiling `GroupSideEffectStep` in OLTP.
* Improved ability to release resources in `GraphProvider` instances in the test suite.
+* Factored `GremlinPlugin` functionality out of gremlin-groovy and into gremlin-core - related classes were deprecated.
* Added a `force` option for killing sessions without waiting for transaction close or timeout of a currently running job or multiple jobs.
* Deprecated `Session.kill()` and `Session.manualKill()`.
* Added `choose(predicate,traversal)` and `choose(traversal,traversal)` to effect if/then-semantics (no else). Equivalent to `choose(x,y,identity())`.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
index e6c64fd..1c6a6e6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java
@@ -83,12 +83,15 @@ import org.apache.tinkerpop.gremlin.structure.io.Io;
import org.apache.tinkerpop.gremlin.structure.io.IoCore;
import org.apache.tinkerpop.gremlin.structure.io.Storage;
import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.javatuples.Pair;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -187,11 +190,11 @@ public final class CoreImports {
// METHODS //
/////////////
- Stream.of(IoCore.class.getMethods()).filter(m -> Modifier.isStatic(m.getModifiers())).forEach(METHOD_IMPORTS::add);
- Stream.of(P.class.getMethods()).filter(m -> Modifier.isStatic(m.getModifiers())).forEach(METHOD_IMPORTS::add);
- Stream.of(__.class.getMethods()).filter(m -> Modifier.isStatic(m.getModifiers())).filter(m -> !m.getName().equals("__")).forEach(METHOD_IMPORTS::add);
- Stream.of(Computer.class.getMethods()).filter(m -> Modifier.isStatic(m.getModifiers())).forEach(METHOD_IMPORTS::add);
- Stream.of(TimeUtil.class.getMethods()).filter(m -> Modifier.isStatic(m.getModifiers())).forEach(METHOD_IMPORTS::add);
+ uniqueMethods(IoCore.class).forEach(METHOD_IMPORTS::add);
+ uniqueMethods(P.class).forEach(METHOD_IMPORTS::add);
+ uniqueMethods(__.class).filter(m -> !m.getName().equals("__")).forEach(METHOD_IMPORTS::add);
+ uniqueMethods(Computer.class).forEach(METHOD_IMPORTS::add);
+ uniqueMethods(TimeUtil.class).forEach(METHOD_IMPORTS::add);
///////////
// ENUMS //
@@ -207,7 +210,6 @@ public final class CoreImports {
Collections.addAll(ENUM_IMPORTS, Scope.values());
Collections.addAll(ENUM_IMPORTS, T.values());
Collections.addAll(ENUM_IMPORTS, TraversalOptionParent.Pick.values());
-
}
private CoreImports() {
@@ -225,4 +227,24 @@ public final class CoreImports {
public static Set<Enum> getEnumImports() {
return Collections.unmodifiableSet(ENUM_IMPORTS);
}
+
+ /**
+ * Filters to unique method names on each class.
+ */
+ private static Stream<Method> uniqueMethods(final Class<?> clazz) {
+ final Set<String> unique = new HashSet<>();
+ return Stream.of(clazz.getMethods())
+ .filter(m -> Modifier.isStatic(m.getModifiers()))
+ .map(m -> Pair.with(generateMethodDescriptor(m), m))
+ .filter(p -> {
+ final boolean exists = unique.contains(p.getValue0());
+ if (!exists) unique.add(p.getValue0());
+ return !exists;
+ })
+ .map(Pair::getValue1);
+ }
+
+ private static String generateMethodDescriptor(final Method m) {
+ return m.getDeclaringClass().getCanonicalName() + "." + m.getName();
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CompileStaticGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CompileStaticGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CompileStaticGroovyCustomizer.java
new file mode 100644
index 0000000..c57e64b
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CompileStaticGroovyCustomizer.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import groovy.transform.CompileStatic;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Injects the {@code CompileStatic} transformer to enable type validation on script execution.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class CompileStaticGroovyCustomizer implements GroovyCustomizer {
+
+ private final String extensions;
+
+ CompileStaticGroovyCustomizer() {
+ this(null);
+ }
+
+ CompileStaticGroovyCustomizer(final String extensions) {
+ this.extensions = extensions;
+ }
+
+ @Override
+ public CompilationCustomizer create() {
+ final Map<String, Object> annotationParams = new HashMap<>();
+ if (extensions != null && !extensions.isEmpty()) {
+ if (extensions.contains(","))
+ annotationParams.put("extensions", Stream.of(extensions.split(",")).collect(Collectors.toList()));
+ else
+ annotationParams.put("extensions", Collections.singletonList(extensions));
+ }
+
+ return new ASTTransformationCustomizer(annotationParams, CompileStatic.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ConfigurationGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ConfigurationGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ConfigurationGroovyCustomizer.java
new file mode 100644
index 0000000..23fe002
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ConfigurationGroovyCustomizer.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
+import org.codehaus.groovy.control.CompilerConfiguration;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Allows configurations to be directly supplied to a groovy {@code CompilerConfiguration} when a
+ * {@link GremlinGroovyScriptEngine} is initialized, providing fine-grained
+ * control over its internals.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class ConfigurationGroovyCustomizer implements GroovyCustomizer {
+
+ private final Map<String,Object> properties;
+
+ /**
+ * Creates a new instance using configuration values specified
+ */
+ ConfigurationGroovyCustomizer(final Object... keyValues) {
+ if (null == keyValues || keyValues.length == 0)
+ throw new IllegalArgumentException("ConfigurationCustomizerProvider must have key/values specified");
+
+ if (keyValues.length % 2 != 0)
+ throw new IllegalArgumentException("The keyValues must have an even number of values");
+
+ properties = ElementHelper.asMap(keyValues);
+ }
+
+ /**
+ * Creates a new instance using configuration values specified
+ */
+ ConfigurationGroovyCustomizer(final Map<String,Object> keyValues) {
+ properties = keyValues;
+ }
+
+ public CompilerConfiguration applyCustomization(final CompilerConfiguration compilerConfiguration) {
+ final Class<CompilerConfiguration> clazz = CompilerConfiguration.class;
+ final List<Method> methods = Arrays.asList(clazz.getMethods());
+ for (Map.Entry<String,Object> entry : properties.entrySet()) {
+ final Method method = methods.stream().filter(m -> m.getName().equals("set" + entry.getKey())).findFirst()
+ .orElseThrow(() -> new IllegalStateException("Invalid setting [" + entry.getKey() + "] for CompilerConfiguration"));
+
+ try {
+ method.invoke(compilerConfiguration, entry.getValue());
+ } catch (Exception ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+
+ return compilerConfiguration;
+ }
+
+ @Override
+ public CompilationCustomizer create() {
+ throw new UnsupportedOperationException("This is a marker implementation that does not create a CompilationCustomizer instance");
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CustomizerProviderCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CustomizerProviderCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CustomizerProviderCustomizer.java
deleted file mode 100644
index 73614a1..0000000
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/CustomizerProviderCustomizer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.groovy.jsr223;
-
-import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
-import org.apache.tinkerpop.gremlin.jsr223.Customizer;
-
-/**
- * An adapter that allows existing {@link CompilerCustomizerProvider} instances to behave as a {#link Customizer}.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-class CustomizerProviderCustomizer implements Customizer {
-
- private final CompilerCustomizerProvider customizerProvider;
-
- CustomizerProviderCustomizer(final CompilerCustomizerProvider customizerProvider) {
- this.customizerProvider = customizerProvider;
- }
-
- CompilerCustomizerProvider getCustomizerProvider() {
- return customizerProvider;
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/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 2996792..0f36dbf 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
@@ -70,6 +70,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -177,6 +178,9 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
private ImportCustomizerProvider importCustomizerProvider;
private final List<CompilerCustomizerProvider> customizerProviders;
+ private final ImportGroovyCustomizer importGroovyCustomizer;
+ private final List<GroovyCustomizer> groovyCustomizers;
+
private final Set<Artifact> artifactsToUse = new HashSet<>();
private final boolean interpreterModeEnabled;
@@ -207,46 +211,21 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
.filter(p -> p instanceof ImportCustomizer)
.map(p -> (ImportCustomizer) p)
.collect(Collectors.toList());
- if (importCustomizers.isEmpty()) {
- importCustomizerProvider = NoImportCustomizerProvider.INSTANCE;
- } else {
- final Set<String> imports = new HashSet<>();
- final Set<String> staticImports = new HashSet<>();
- importCustomizers.forEach(ic -> {
- ic.getClassImports().forEach(c -> {
- final String importStatement = c.getName();
- imports.add(importStatement);
- });
-
- ic.getEnumImports().forEach(e -> {
- final String importStatement = e.getDeclaringClass().getCanonicalName() + ".*";
- staticImports.add(importStatement);
- });
+ final ImportCustomizer[] importCustomizerArray = new ImportCustomizer[importCustomizers.size()];
+ importGroovyCustomizer = new ImportGroovyCustomizer(importCustomizers.toArray(importCustomizerArray));
- ic.getMethodImports().forEach(m -> {
- final String importStatement = m.getDeclaringClass().getCanonicalName() + ".*";
- staticImports.add(importStatement);
- });
- });
-
- importCustomizerProvider = new EmptyImportCustomizerProvider(imports, staticImports);
- }
-
- // this is a bit temporary - until CompilerCustomizerProvider is gone
- final List<CompilerCustomizerProvider> customizerProviderCustomizer = listOfCustomizers.stream()
- .filter(p -> p instanceof CustomizerProviderCustomizer)
- .map(p -> ((CustomizerProviderCustomizer) p).getCustomizerProvider())
+ groovyCustomizers = listOfCustomizers.stream()
+ .filter(p -> p instanceof GroovyCustomizer)
+ .map(p -> ((GroovyCustomizer) p))
.collect(Collectors.toList());
// determine if interpreter mode should be enabled
- interpreterModeEnabled = customizerProviderCustomizer.stream()
- .anyMatch(p -> p.getClass().equals(InterpreterModeCustomizerProvider.class));
+ interpreterModeEnabled = groovyCustomizers.stream()
+ .anyMatch(p -> p.getClass().equals(InterpreterModeGroovyCustomizer.class));
- // remove used providers as the rest will be applied directly
- customizerProviders = customizerProviderCustomizer.stream()
- .filter(p -> p != null &&
- !((p instanceof ImportCustomizerProvider)))
- .collect(Collectors.toList());
+ // not using the old provider model so set that to empty list so that when createClassLoader is called
+ // it knows to use groovyCustomizers instead
+ customizerProviders = Collections.emptyList();
createClassLoader();
}
@@ -273,10 +252,14 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
// remove used providers as the rest will be applied directly
customizerProviders = providers.stream()
- .filter(p -> p != null &&
- !((p instanceof ImportCustomizerProvider)))
+ .filter(p -> p != null && !(p instanceof ImportCustomizerProvider))
.collect(Collectors.toList());
+ // groovy customizers are not used here - set to empty list so that the customizerProviders get used
+ // in createClassLoader
+ groovyCustomizers = Collections.emptyList();
+ importGroovyCustomizer = null;
+
createClassLoader();
}
@@ -350,7 +333,11 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
*/
@Override
public synchronized void addImports(final Set<String> importStatements) {
- final Set<String> staticImports = new HashSet<>();
+ // can't use this feature because imports can't come in as String for the revised model
+ if (null == importCustomizerProvider)
+ throw new IllegalStateException("Imports cannot be added to a GremlinGroovyScriptEngine that uses Customizer instances");
+
+ final Set<String> staticImports = new HashSet<>();
final Set<String> imports = new HashSet<>();
importStatements.forEach(s -> {
@@ -362,9 +349,8 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
imports.add(s.substring(6).trim());
});
- // use the EmptyImportCustomizer because it doesn't come with static initializers containing
- // existing imports.
importCustomizerProvider = new EmptyImportCustomizerProvider(importCustomizerProvider, imports, staticImports);
+
internalReset();
}
@@ -697,17 +683,32 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl
}
private synchronized void createClassLoader() {
- final CompilerConfiguration conf = new CompilerConfiguration(CompilerConfiguration.DEFAULT);
- conf.addCompilationCustomizers(this.importCustomizerProvider.create());
+ // check for customizerProviders temporarily until this deprecated stuff is gone
+ if (groovyCustomizers.isEmpty() && null == importGroovyCustomizer) {
+ final CompilerConfiguration conf = new CompilerConfiguration(CompilerConfiguration.DEFAULT);
+ conf.addCompilationCustomizers(this.importCustomizerProvider.create());
- // ConfigurationCustomizerProvider is treated separately
- customizerProviders.stream().filter(cp -> !(cp instanceof ConfigurationCustomizerProvider))
- .forEach(p -> conf.addCompilationCustomizers(p.create()));
+ // ConfigurationCustomizerProvider is treated separately
+ customizerProviders.stream().filter(cp -> !(cp instanceof ConfigurationCustomizerProvider))
+ .forEach(p -> conf.addCompilationCustomizers(p.create()));
- customizerProviders.stream().filter(cp -> cp instanceof ConfigurationCustomizerProvider).findFirst()
- .ifPresent(cp -> ((ConfigurationCustomizerProvider) cp).applyCustomization(conf));
+ customizerProviders.stream().filter(cp -> cp instanceof ConfigurationCustomizerProvider).findFirst()
+ .ifPresent(cp -> ((ConfigurationCustomizerProvider) cp).applyCustomization(conf));
- this.loader = new GremlinGroovyClassLoader(getParentLoader(), conf);
+ this.loader = new GremlinGroovyClassLoader(getParentLoader(), conf);
+ } else {
+ final CompilerConfiguration conf = new CompilerConfiguration(CompilerConfiguration.DEFAULT);
+ conf.addCompilationCustomizers(this.importGroovyCustomizer.create());
+
+ // ConfigurationCustomizerProvider is treated separately
+ groovyCustomizers.stream().filter(cp -> !(cp instanceof ConfigurationGroovyCustomizer))
+ .forEach(p -> conf.addCompilationCustomizers(p.create()));
+
+ groovyCustomizers.stream().filter(cp -> cp instanceof ConfigurationGroovyCustomizer).findFirst()
+ .ifPresent(cp -> ((ConfigurationGroovyCustomizer) cp).applyCustomization(conf));
+
+ this.loader = new GremlinGroovyClassLoader(getParentLoader(), conf);
+ }
}
private void use(final Artifact artifact) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
index 0d2e9c6..71f5dc7 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPlugin.java
@@ -18,12 +18,6 @@
*/
package org.apache.tinkerpop.gremlin.groovy.jsr223;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.CompileStaticCustomizerProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.ConfigurationCustomizerProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.InterpreterModeCustomizerProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.ThreadInterruptCustomizerProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TimedInterruptCustomizerProvider;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TypeCheckedCustomizerProvider;
import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
import org.apache.tinkerpop.gremlin.jsr223.Customizer;
import org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin;
@@ -106,21 +100,21 @@ public class GroovyCompilerGremlinPlugin extends AbstractGremlinPlugin {
final List<Customizer> list = new ArrayList<>();
if (interpreterMode)
- list.add(new CustomizerProviderCustomizer(new InterpreterModeCustomizerProvider()));
+ list.add(new InterpreterModeGroovyCustomizer());
if (!keyValues.isEmpty())
- list.add(new CustomizerProviderCustomizer(new ConfigurationCustomizerProvider(keyValues)));
+ list.add(new ConfigurationGroovyCustomizer(keyValues));
if (threadInterrupt)
- list.add(new CustomizerProviderCustomizer(new ThreadInterruptCustomizerProvider()));
+ list.add(new ThreadInterruptGroovyCustomizer());
if (timeInMillis > 0)
- list.add(new CustomizerProviderCustomizer(new TimedInterruptCustomizerProvider(timeInMillis)));
+ list.add(new TimedInterruptGroovyCustomizer(timeInMillis));
if (compilation == Compilation.COMPILE_STATIC)
- list.add(new CustomizerProviderCustomizer(new CompileStaticCustomizerProvider(extensions)));
+ list.add(new CompileStaticGroovyCustomizer(extensions));
else if (compilation == Compilation.TYPE_CHECKED)
- list.add(new CustomizerProviderCustomizer(new TypeCheckedCustomizerProvider(extensions)));
+ list.add(new TypeCheckedGroovyCustomizer(extensions));
else if (compilation != Compilation.NONE)
throw new IllegalStateException("Use of unknown compilation type: " + compilation);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCustomizer.java
new file mode 100644
index 0000000..94426c0
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCustomizer.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.jsr223.Customizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public interface GroovyCustomizer extends Customizer {
+
+ /**
+ * Create a new instance of a {@code CompilationCustomizer} to add to the {@link GremlinGroovyScriptEngine}.
+ */
+ public CompilationCustomizer create();
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ImportGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ImportGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ImportGroovyCustomizer.java
new file mode 100644
index 0000000..79243a0
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ImportGroovyCustomizer.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class ImportGroovyCustomizer implements GroovyCustomizer {
+
+ private final List<ImportCustomizer> customizers;
+
+ ImportGroovyCustomizer(final ImportCustomizer... customizers) {
+ this.customizers = Arrays.asList(customizers);
+ }
+
+ ImportGroovyCustomizer(final ImportGroovyCustomizer ic, final ImportCustomizer... customizers) {
+ this.customizers = new ArrayList<>(Arrays.asList(customizers));
+ this.customizers.addAll(ic.customizers);
+ }
+
+ @Override
+ public CompilationCustomizer create() {
+ final org.codehaus.groovy.control.customizers.ImportCustomizer ic = new org.codehaus.groovy.control.customizers.ImportCustomizer();
+
+ // there's something weird in groovy about doing specific imports instead of wildcard imports. with wildcard
+ // imports groovy seems to allow methods to be overloaded with enums such that things like Column.values and
+ // __.values() can be resolved by the compiler. if they are both directly in the imports then one or the other
+ // can't be found. the temporary fix is to hardcode a wildcard import __ and then filter out the core imports
+ // from the incoming customizer. ultimately, the fix should be to resolve the naming conflicts to ensure a
+ // unique space somehow.
+ ic.addStaticStars(__.class.getCanonicalName());
+ for (ImportCustomizer customizer : customizers) {
+ customizer.getClassImports().forEach(i -> ic.addImports(i.getCanonicalName()));
+ customizer.getMethodImports().stream()
+ .filter(m -> !m.getDeclaringClass().equals(__.class))
+ .forEach(m -> ic.addStaticImport(m.getDeclaringClass().getCanonicalName(), m.getName()));
+ customizer.getEnumImports().forEach(m -> ic.addStaticImport(m.getDeclaringClass().getCanonicalName(), m.name()));
+ }
+
+ return ic;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/InterpreterModeGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/InterpreterModeGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/InterpreterModeGroovyCustomizer.java
new file mode 100644
index 0000000..89b471e
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/InterpreterModeGroovyCustomizer.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.InterpreterMode;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+/**
+ * Places the {@code ScriptEngine} in "interpreter mode" where local variables of a script are treated as global
+ * bindings. This implementation is technically not a true {@link GroovyCustomizer} instance as the
+ * "interpreter mode" feature does not require a {@code CompilerCustomizer}. This class merely acts as a flag that
+ * tells the {@link GremlinGroovyScriptEngine} to turn this feature on.
+ */
+class InterpreterModeGroovyCustomizer implements GroovyCustomizer {
+ @Override
+ public CompilationCustomizer create() {
+ return new ASTTransformationCustomizer(InterpreterMode.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ThreadInterruptGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ThreadInterruptGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ThreadInterruptGroovyCustomizer.java
new file mode 100644
index 0000000..4492c3c
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ThreadInterruptGroovyCustomizer.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import groovy.transform.ThreadInterrupt;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+/**
+ * Injects checks for thread interruption into scripts.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class ThreadInterruptGroovyCustomizer implements GroovyCustomizer {
+ @Override
+ public CompilationCustomizer create() {
+ return new ASTTransformationCustomizer(ThreadInterrupt.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptGroovyCustomizer.java
new file mode 100644
index 0000000..c432164
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptGroovyCustomizer.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import groovy.transform.TimedInterrupt;
+import org.codehaus.groovy.ast.tools.GeneralUtils;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Injects a check in loops and other areas of code to interrupt script execution if the run time exceeds the
+ * specified time.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class TimedInterruptGroovyCustomizer implements GroovyCustomizer {
+ private static final long DEFAULT_INTERRUPTION_TIMEOUT = 60000;
+
+ private final long interruptionTimeout;
+
+ TimedInterruptGroovyCustomizer() {
+ this(DEFAULT_INTERRUPTION_TIMEOUT);
+ }
+
+ TimedInterruptGroovyCustomizer(final Long interruptionTimeout) {
+ this.interruptionTimeout = interruptionTimeout;
+ }
+
+ TimedInterruptGroovyCustomizer(final Integer interruptionTimeout) {
+ this.interruptionTimeout = interruptionTimeout.longValue();
+ }
+
+ @Override
+ public CompilationCustomizer create() {
+ final Map<String, Object> timedInterruptAnnotationParams = new HashMap<>();
+ timedInterruptAnnotationParams.put("value", interruptionTimeout);
+ timedInterruptAnnotationParams.put("unit", GeneralUtils.propX(GeneralUtils.classX(TimeUnit.class), TimeUnit.MILLISECONDS.toString()));
+ timedInterruptAnnotationParams.put("checkOnMethodStart", false);
+ timedInterruptAnnotationParams.put("thrown", GeneralUtils.classX(TimedInterruptTimeoutException.class));
+ return new ASTTransformationCustomizer(timedInterruptAnnotationParams, TimedInterrupt.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptTimeoutException.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptTimeoutException.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptTimeoutException.java
new file mode 100644
index 0000000..bdd49b3
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TimedInterruptTimeoutException.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.TimedInterruptCustomizerProvider;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * An exception thrown from the {@link TimedInterruptCustomizerProvider} when the timeout is exceeded. This exception
+ * allows differentiation from other "timeout exceptions" that might occur.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class TimedInterruptTimeoutException extends TimeoutException {
+ public TimedInterruptTimeoutException() {
+ }
+
+ public TimedInterruptTimeoutException(final String message) {
+ super(message);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TypeCheckedGroovyCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TypeCheckedGroovyCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TypeCheckedGroovyCustomizer.java
new file mode 100644
index 0000000..ac8dd1d
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/TypeCheckedGroovyCustomizer.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import groovy.transform.TypeChecked;
+import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Injects the {@code TypeChecked} transformer to enable type validation on script execution.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class TypeCheckedGroovyCustomizer implements GroovyCustomizer {
+
+ private final String extensions;
+
+ TypeCheckedGroovyCustomizer() {
+ this(null);
+ }
+
+ /**
+ * Configures the {@code TypeChecked} annotation to use optional extensions. The argument should be one or more
+ * groovy scripts on the classpath or the fully qualified classname of a precompiled extension. If there are
+ * multiple extensions then extensions should be comma separated.
+ */
+ TypeCheckedGroovyCustomizer(final String extensions) {
+ this.extensions = extensions;
+ }
+
+ @Override
+ public CompilationCustomizer create() {
+ final Map<String, Object> annotationParams = new HashMap<>();
+ if (extensions != null && !extensions.isEmpty()) {
+ if (extensions.contains(","))
+ annotationParams.put("extensions", Stream.of(extensions.split(",")).collect(Collectors.toList()));
+ else
+ annotationParams.put("extensions", Collections.singletonList(extensions));
+ }
+ return new ASTTransformationCustomizer(annotationParams, TypeChecked.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/CompileStaticCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/CompileStaticCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/CompileStaticCustomizerProvider.java
index ab0bff5..4371e8a 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/CompileStaticCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/CompileStaticCustomizerProvider.java
@@ -34,7 +34,9 @@ import java.util.stream.Stream;
* Injects the {@code CompileStatic} transformer to enable type validation on script execution.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class CompileStaticCustomizerProvider implements CompilerCustomizerProvider {
private final String extensions;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ConfigurationCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ConfigurationCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ConfigurationCustomizerProvider.java
index 78357cb..3c8b673 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ConfigurationCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ConfigurationCustomizerProvider.java
@@ -35,7 +35,9 @@ import java.util.Map;
* control over its internals.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class ConfigurationCustomizerProvider implements CompilerCustomizerProvider {
private final Map<String,Object> properties;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/InterpreterModeCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/InterpreterModeCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/InterpreterModeCustomizerProvider.java
index 013ba8b..3044474 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/InterpreterModeCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/InterpreterModeCustomizerProvider.java
@@ -29,7 +29,11 @@ import org.codehaus.groovy.control.customizers.CompilationCustomizer;
* bindings. This implementation is technically not a true {@link CompilerCustomizerProvider} instance as the
* "interpreter mode" feature does not require a {@code CompilerCustomizer}. This class merely acts as a flag that
* tells the {@link org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine} to turn this feature on.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class InterpreterModeCustomizerProvider implements CompilerCustomizerProvider {
@Override
public CompilationCustomizer create() {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ThreadInterruptCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ThreadInterruptCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ThreadInterruptCustomizerProvider.java
index e46e9b7..c5fc60c 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ThreadInterruptCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/ThreadInterruptCustomizerProvider.java
@@ -28,7 +28,9 @@ import org.codehaus.groovy.control.customizers.CompilationCustomizer;
* Injects checks for thread interruption into scripts.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class ThreadInterruptCustomizerProvider implements CompilerCustomizerProvider {
@Override
public CompilationCustomizer create() {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptCustomizerProvider.java
index 9913088..f0e1080 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptCustomizerProvider.java
@@ -34,7 +34,9 @@ import java.util.concurrent.TimeUnit;
* specified time.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class TimedInterruptCustomizerProvider implements CompilerCustomizerProvider {
public static final long DEFAULT_INTERRUPTION_TIMEOUT = 60000;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptTimeoutException.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptTimeoutException.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptTimeoutException.java
index 40abd59..4063d4f 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptTimeoutException.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TimedInterruptTimeoutException.java
@@ -23,7 +23,11 @@ import java.util.concurrent.TimeoutException;
/**
* An exception thrown from the {@link TimedInterruptCustomizerProvider} when the timeout is exceeded. This exception
* allows differentiation from other "timeout exceptions" that might occur.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, replaced by {@link org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException}.
*/
+@Deprecated
public class TimedInterruptTimeoutException extends TimeoutException {
public TimedInterruptTimeoutException() {
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TypeCheckedCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TypeCheckedCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TypeCheckedCustomizerProvider.java
index cf9147b..b5c2729 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TypeCheckedCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/TypeCheckedCustomizerProvider.java
@@ -34,7 +34,9 @@ import java.util.stream.Stream;
* Injects the {@code TypeChecked} transformer to enable type validation on script execution.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced by a public class.
*/
+@Deprecated
public class TypeCheckedCustomizerProvider implements CompilerCustomizerProvider {
private final String extensions;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/VariableIdentificationCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/VariableIdentificationCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/VariableIdentificationCustomizer.java
index 79df578..2c216d7 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/VariableIdentificationCustomizer.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/customizer/VariableIdentificationCustomizer.java
@@ -35,7 +35,9 @@ import java.util.TreeSet;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, not replaced.
*/
+@Deprecated
public class VariableIdentificationCustomizer extends CompilationCustomizer {
private static final ThreadLocal<Set<String>> variables = new ThreadLocal<Set<String>>() {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineCompileStaticTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineCompileStaticTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineCompileStaticTest.java
index b62f3f3..6f3383e 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineCompileStaticTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineCompileStaticTest.java
@@ -59,8 +59,8 @@ public class GremlinGroovyScriptEngineCompileStaticTest {
assertEquals(255, scriptEngine.eval("((Object) new java.awt.Color(255, 255, 255)).getRed()"));
}
- final CompileStaticCustomizerProvider provider = new CompileStaticCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(provider))) {
+ final CompileStaticGroovyCustomizer provider = new CompileStaticGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(provider)) {
scriptEngine.eval("((Object) new java.awt.Color(255, 255, 255)).getRed()");
fail("Should have failed type checking");
} catch (ScriptException se) {
@@ -92,14 +92,14 @@ public class GremlinGroovyScriptEngineCompileStaticTest {
@Test
public void shouldCompileStaticWithExtension() throws Exception {
// with no type checking extension this should pass
- final CompileStaticCustomizerProvider providerNoExtension = new CompileStaticCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerNoExtension))) {
+ final CompileStaticGroovyCustomizer providerNoExtension = new CompileStaticGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerNoExtension)) {
assertEquals(255, scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red"));
}
- final CompileStaticCustomizerProvider providerWithExtension = new CompileStaticCustomizerProvider(
+ final CompileStaticGroovyCustomizer providerWithExtension = new CompileStaticGroovyCustomizer(
PrecompiledExtensions.PreventColorUsageExtension.class.getName());
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerWithExtension))) {
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerWithExtension)) {
scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red");
fail("Should have failed type checking");
} catch (ScriptException se) {
@@ -140,16 +140,16 @@ public class GremlinGroovyScriptEngineCompileStaticTest {
@Test
public void shouldCompileStaticWithMultipleExtension() throws Exception {
// with no type checking extension this should pass
- final CompileStaticCustomizerProvider providerNoExtension = new CompileStaticCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerNoExtension))) {
+ final CompileStaticGroovyCustomizer providerNoExtension = new CompileStaticGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerNoExtension)) {
assertEquals(255, scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red"));
assertEquals(1l, scriptEngine.eval("def c = new java.util.concurrent.CountDownLatch(1); c.count"));
}
- final CompileStaticCustomizerProvider providerWithExtension = new CompileStaticCustomizerProvider(
+ final CompileStaticGroovyCustomizer providerWithExtension = new CompileStaticGroovyCustomizer(
PrecompiledExtensions.PreventColorUsageExtension.class.getName() +
"," + PrecompiledExtensions.PreventCountDownLatchUsageExtension.class.getName());
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerWithExtension))) {
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerWithExtension)) {
scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red");
fail("Should have failed type checking");
} catch (ScriptException se) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineConfigTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineConfigTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineConfigTest.java
index 6b18ece..289b2ca 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineConfigTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineConfigTest.java
@@ -41,9 +41,8 @@ public class GremlinGroovyScriptEngineConfigTest {
@Test
public void shouldAddBaseScriptClass() throws Exception {
- final ScriptEngine engine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(
- new ConfigurationCustomizerProvider("ScriptBaseClass", BaseScriptForTesting.class.getName())),
- new CustomizerProviderCustomizer(new DefaultImportCustomizerProvider()));
+ final ScriptEngine engine = new GremlinGroovyScriptEngine(
+ new ConfigurationGroovyCustomizer("ScriptBaseClass", BaseScriptForTesting.class.getName()));
assertEquals("hello, stephen", engine.eval("hello('stephen')"));
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index 65dc56e..eb0a44b 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -122,7 +122,7 @@ public class GremlinGroovyScriptEngineTest {
@Test
public void shouldPromoteDefinedVarsInInterpreterModeWithNoBindings() throws Exception {
- final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(new InterpreterModeCustomizerProvider()));
+ final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new InterpreterModeGroovyCustomizer());
engine.eval("def addItUp = { x, y -> x + y }");
assertEquals(3, engine.eval("int xxx = 1 + 2"));
assertEquals(4, engine.eval("yyy = xxx + 1"));
@@ -168,7 +168,7 @@ public class GremlinGroovyScriptEngineTest {
@Test
public void shouldPromoteDefinedVarsInInterpreterModeWithBindings() throws Exception {
- final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(new InterpreterModeCustomizerProvider()));
+ final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new InterpreterModeGroovyCustomizer());
final Bindings b = new SimpleBindings();
b.put("x", 2);
engine.eval("def addItUp = { x, y -> x + y }", b);
@@ -354,7 +354,7 @@ public class GremlinGroovyScriptEngineTest {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<Color> color = new AtomicReference<>(Color.RED);
- final GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine();
+ final GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
try {
scriptEngine.eval("Color.BLACK");
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineThreadInterruptTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineThreadInterruptTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineThreadInterruptTest.java
index ea778c6..499373f 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineThreadInterruptTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineThreadInterruptTest.java
@@ -55,7 +55,7 @@ public class GremlinGroovyScriptEngineThreadInterruptTest {
@Test
public void shouldInterruptWhile() throws Exception {
- final ScriptEngine engine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(new ThreadInterruptCustomizerProvider()));
+ final ScriptEngine engine = new GremlinGroovyScriptEngine(new ThreadInterruptGroovyCustomizer());
final AtomicBoolean asserted = new AtomicBoolean(false);
final Thread t = new Thread(() -> {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java
index fa8d4ef..1745b5d 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java
@@ -25,7 +25,6 @@ import org.junit.Test;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
-import java.util.concurrent.TimeoutException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -49,14 +48,12 @@ public class GremlinGroovyScriptEngineTimedInterruptTest {
@Test
public void shouldTimeoutScriptOnTimedWhile() throws Exception {
- final ScriptEngine engine = new GremlinGroovyScriptEngine(
- new CustomizerProviderCustomizer(new TimedInterruptCustomizerProvider(1000)),
- new CustomizerProviderCustomizer(new DefaultImportCustomizerProvider()));
+ final ScriptEngine engine = new GremlinGroovyScriptEngine(new TimedInterruptGroovyCustomizer(1000));
try {
engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
fail("This should have timed out");
} catch (ScriptException se) {
- assertEquals(TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
+ assertEquals(org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
}
}
@@ -78,15 +75,13 @@ public class GremlinGroovyScriptEngineTimedInterruptTest {
@Test
public void shouldTimeoutScriptOnTimedWhileOnceEngineHasBeenAliveForLongerThanTimeout() throws Exception {
- final ScriptEngine engine = new GremlinGroovyScriptEngine(
- new CustomizerProviderCustomizer(new TimedInterruptCustomizerProvider(1000)),
- new CustomizerProviderCustomizer(new DefaultImportCustomizerProvider()));
+ final ScriptEngine engine = new GremlinGroovyScriptEngine(new TimedInterruptGroovyCustomizer(1000));
Thread.sleep(2000);
try {
engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
fail("This should have timed out");
} catch (ScriptException se) {
- assertEquals(TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
+ assertEquals(org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
}
assertEquals(2, engine.eval("1+1"));
@@ -116,8 +111,7 @@ public class GremlinGroovyScriptEngineTimedInterruptTest {
@Test
public void shouldContinueToEvalScriptsEvenWithTimedInterrupt() throws Exception {
final ScriptEngine engine = new GremlinGroovyScriptEngine(
- new CustomizerProviderCustomizer(new TimedInterruptCustomizerProvider(1000)),
- new CustomizerProviderCustomizer(new DefaultImportCustomizerProvider()));
+ new TimedInterruptGroovyCustomizer(1000));
for (int ix = 0; ix < 5; ix++) {
try {
@@ -125,7 +119,7 @@ public class GremlinGroovyScriptEngineTimedInterruptTest {
engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 2000) {}");
fail("This should have timed out");
} catch (ScriptException se) {
- assertEquals(TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
+ assertEquals(org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException.class, se.getCause().getCause().getClass());
}
// this script takes 500 ms less than the interruptionTimeout
@@ -148,9 +142,7 @@ public class GremlinGroovyScriptEngineTimedInterruptTest {
@Test
public void shouldNotTimeoutStandaloneFunction() throws Exception {
// use a super fast timeout which should not prevent the call of a cached function
- final ScriptEngine engine = new GremlinGroovyScriptEngine(
- new CustomizerProviderCustomizer(new TimedInterruptCustomizerProvider(1)),
- new CustomizerProviderCustomizer(new DefaultImportCustomizerProvider()));
+ final ScriptEngine engine = new GremlinGroovyScriptEngine(new TimedInterruptGroovyCustomizer(1));
engine.eval("def addItUp(x,y) { x + y }");
assertEquals(3, engine.eval("addItUp(1,2)"));
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTypeCheckedTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTypeCheckedTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTypeCheckedTest.java
index 0ca12d7..6c70e8e 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTypeCheckedTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTypeCheckedTest.java
@@ -60,8 +60,8 @@ public class GremlinGroovyScriptEngineTypeCheckedTest {
assertEquals(255, scriptEngine.eval("((Object) new java.awt.Color(255, 255, 255)).getRed()"));
}
- final TypeCheckedCustomizerProvider provider = new TypeCheckedCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(provider))) {
+ final TypeCheckedGroovyCustomizer provider = new TypeCheckedGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(provider)) {
scriptEngine.eval("((Object) new java.awt.Color(255, 255, 255)).getRed()");
fail("Should have failed type checking");
} catch (ScriptException se) {
@@ -93,14 +93,14 @@ public class GremlinGroovyScriptEngineTypeCheckedTest {
@Test
public void shouldTypeCheckWithExtension() throws Exception {
// with no type checking extension this should pass
- final TypeCheckedCustomizerProvider providerNoExtension = new TypeCheckedCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerNoExtension))) {
+ final TypeCheckedGroovyCustomizer providerNoExtension = new TypeCheckedGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerNoExtension)) {
assertEquals(255, scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red"));
}
final CompileStaticCustomizerProvider providerWithExtension = new CompileStaticCustomizerProvider(
PrecompiledExtensions.PreventColorUsageExtension.class.getName());
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerWithExtension))) {
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerWithExtension)) {
scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red");
fail("Should have failed type checking");
} catch (ScriptException se) {
@@ -141,16 +141,16 @@ public class GremlinGroovyScriptEngineTypeCheckedTest {
@Test
public void shouldTypeCheckWithMultipleExtension() throws Exception {
// with no type checking extension this should pass
- final TypeCheckedCustomizerProvider providerNoExtension = new TypeCheckedCustomizerProvider();
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerNoExtension))) {
+ final TypeCheckedGroovyCustomizer providerNoExtension = new TypeCheckedGroovyCustomizer();
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerNoExtension)) {
assertEquals(255, scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red"));
assertEquals(1l, scriptEngine.eval("def c = new java.util.concurrent.CountDownLatch(1); c.count"));
}
- final TypeCheckedCustomizerProvider providerWithExtension = new TypeCheckedCustomizerProvider(
+ final TypeCheckedGroovyCustomizer providerWithExtension = new TypeCheckedGroovyCustomizer(
PrecompiledExtensions.PreventColorUsageExtension.class.getName() +
"," + PrecompiledExtensions.PreventCountDownLatchUsageExtension.class.getName());
- try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(new CustomizerProviderCustomizer(providerWithExtension))) {
+ try (GremlinGroovyScriptEngine scriptEngine = new GremlinGroovyScriptEngine(providerWithExtension)) {
scriptEngine.eval("def c = new java.awt.Color(255, 255, 255); c.red");
fail("Should have failed type checking");
} catch (ScriptException se) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPluginTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPluginTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPluginTest.java
index 8d2178f..f795fa7 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPluginTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyCompilerGremlinPluginTest.java
@@ -58,7 +58,7 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(CompileStaticCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(CompileStaticGroovyCustomizer.class));
}
@Test
@@ -68,7 +68,7 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(TypeCheckedCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(TypeCheckedGroovyCustomizer.class));
}
@Test
@@ -80,12 +80,12 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(ConfigurationCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(ConfigurationGroovyCustomizer.class));
final CompilerConfiguration compilerConfiguration = new CompilerConfiguration();
assertThat(compilerConfiguration.getDebug(), is(false));
- final ConfigurationCustomizerProvider provider = (ConfigurationCustomizerProvider) ((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider();
+ final ConfigurationGroovyCustomizer provider = (ConfigurationGroovyCustomizer) customizers.get()[0];
provider.applyCustomization(compilerConfiguration);
assertThat(compilerConfiguration.getDebug(), is(true));
@@ -98,7 +98,7 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(InterpreterModeCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(InterpreterModeGroovyCustomizer.class));
}
@Test
@@ -108,7 +108,7 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(ThreadInterruptCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(ThreadInterruptGroovyCustomizer.class));
}
@Test
@@ -118,7 +118,7 @@ public class GroovyCompilerGremlinPluginTest {
final Optional<Customizer[]> customizers = plugin.getCustomizers("gremlin-groovy");
assertThat(customizers.isPresent(), is(true));
assertEquals(1, customizers.get().length);
- assertThat(((CustomizerProviderCustomizer) customizers.get()[0]).getCustomizerProvider(), instanceOf(TimedInterruptCustomizerProvider.class));
+ assertThat(customizers.get()[0], instanceOf(TimedInterruptGroovyCustomizer.class));
}
@Test(expected = IllegalStateException.class)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a82c56fa/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
index b931b8c..d5fe62a 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
@@ -279,6 +279,11 @@ public abstract class AbstractEvalOpProcessor extends AbstractOpProcessor {
final String errorMessage = String.format("A timeout occurred within the script during evaluation of [%s] - consider increasing the limit given to TimedInterruptCustomizerProvider", msg);
logger.warn(errorMessage);
ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_TIMEOUT).statusMessage("Timeout during script evaluation triggered by TimedInterruptCustomizerProvider").create());
+ } else if (t instanceof org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException) {
+ // occurs when the TimedInterruptCustomizerProvider is in play
+ final String errorMessage = String.format("A timeout occurred within the script during evaluation of [%s] - consider increasing the limit given to TimedInterruptCustomizerProvider", msg);
+ logger.warn(errorMessage);
+ ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_TIMEOUT).statusMessage("Timeout during script evaluation triggered by TimedInterruptCustomizerProvider").create());
} else if (t instanceof TimeoutException) {
final String errorMessage = String.format("Response evaluation exceeded the configured threshold for request [%s] - %s", msg, t.getMessage());
logger.warn(errorMessage, t);