[
https://issues.apache.org/jira/browse/TINKERPOP-2959?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17733218#comment-17733218
]
ASF GitHub Bot commented on TINKERPOP-2959:
-------------------------------------------
vkagamlyk commented on code in PR #2094:
URL: https://github.com/apache/tinkerpop/pull/2094#discussion_r1231504873
##########
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java:
##########
@@ -0,0 +1,420 @@
+/*
+ * 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.language.grammar;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Merge;
+import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.function.Function;
+
+public class ArgumentVisitor extends DefaultGremlinBaseVisitor<Object> {
+
+ private final VariableResolver resolver;
+
+ private final GremlinAntlrToJava antlr;
+
+ public ArgumentVisitor(final VariableResolver resolver, final
GremlinAntlrToJava antlr) {
+ this.resolver = resolver;
+ this.antlr = antlr;
+ }
+
+ /**
+ * Wrapper to visit function for boolean.
+ */
+ public boolean parseBoolean(final GremlinParser.BooleanArgumentContext
ctx) {
+ return (boolean) visitBooleanArgument(ctx);
+ }
+
+ /**
+ * Wrapper to visit function for integer types.
+ */
+ public Number parseNumber(final GremlinParser.IntegerArgumentContext ctx) {
+ return (Number) visitIntegerArgument(ctx);
+ }
+
+ /**
+ * Wrapper to visit function for float types.
+ */
+ public Number parseNumber(final GremlinParser.FloatArgumentContext ctx) {
+ return (Number) visitFloatArgument(ctx);
+ }
+
+ /**
+ * Wrapper to visit function for string types.
+ */
+ public String parseString(final GremlinParser.StringArgumentContext ctx) {
+ return (String) visitStringArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for object types.
+ */
+ public Object parseObject(final
GremlinParser.GenericLiteralArgumentContext ctx) {
+ return visitGenericLiteralArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Direction} types.
+ */
+ public Direction parseDirection(final
GremlinParser.TraversalDirectionArgumentContext ctx) {
+ return (Direction) visitTraversalDirectionArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Vertex} types.
+ */
+ public Vertex parseVertex(final
GremlinParser.StructureVertexArgumentContext ctx) {
+ return (Vertex) visitStructureVertexArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Order} types.
+ */
+ public Order parseOrder(final GremlinParser.TraversalOrderArgumentContext
ctx) {
+ return (Order) visitTraversalOrderArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Scope} types.
+ */
+ public Scope parseScope(final GremlinParser.TraversalScopeArgumentContext
ctx) {
+ return (Scope) visitTraversalScopeArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link T} types.
+ */
+ public T parseT(final GremlinParser.TraversalTokenArgumentContext ctx) {
+ return (T) visitTraversalTokenArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link VertexProperty.Cardinality} types.
+ */
+ public VertexProperty.Cardinality parseCardinality(final
GremlinParser.TraversalCardinalityArgumentContext ctx) {
+ return (VertexProperty.Cardinality)
visitTraversalCardinalityArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Merge} types.
+ */
+ public Merge parseMerge(final GremlinParser.TraversalMergeArgumentContext
ctx) {
+ return (Merge) visitTraversalMergeArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Pop} types.
+ */
+ public Pop parsePop(final GremlinParser.TraversalPopArgumentContext ctx) {
+ return (Pop) visitTraversalPopArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@link Pop} types.
+ */
+ public Column parseColumn(final
GremlinParser.TraversalColumnArgumentContext ctx) {
+ return (Column) visitTraversalColumnArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@code Function} types like {@link T}
and {@link Column}.
+ */
+ public Function parseFunction(final
GremlinParser.TraversalFunctionArgumentContext ctx) {
+ return (Function) visitTraversalFunctionArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@code Comparator} types like {@link
Order}.
+ */
+ public Comparator parseComparator(final
GremlinParser.TraversalComparatorArgumentContext ctx) {
+ return (Comparator) visitTraversalComparatorArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@code Map} types.
+ */
+ public Map parseMap(final GremlinParser.GenericLiteralMapArgumentContext
ctx) {
+ return (Map) visitGenericLiteralMapArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for {@code Map} types.
+ */
+ public Map parseMap(final
GremlinParser.GenericLiteralMapNullableArgumentContext ctx) {
+ return (Map) visitGenericLiteralMapNullableArgument(ctx);
+ }
+
+ /**
+ * Wrapper for visit function for list types.
+ */
+ public Object[] parseObjectVarargs(final
GremlinParser.GenericLiteralListArgumentContext ctx) {
+ if (ctx.genericLiteralList() != null) {
+ return
antlr.genericVisitor.parseObjectList(ctx.genericLiteralList());
+ } else {
+ final Object l = visitVariable(ctx.variable());
+ if (null == l) {
+ return null;
+ } else if (l.getClass().isArray()) {
+ int length = Array.getLength(l);
+ Object[] result = new Object[length];
+ for (int i = 0; i < length; i++) {
+ result[i] = Array.get(l, i);
+ }
+ return result;
+ } else if (l instanceof Collection) {
+ Collection<?> collection = (Collection<?>) l;
+ return collection.toArray();
+ } else {
Review Comment:
is it possible to get Vararg as `Iterable`?
> Allow the grammar to support parameters
> ---------------------------------------
>
> Key: TINKERPOP-2959
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2959
> Project: TinkerPop
> Issue Type: Improvement
> Components: language
> Affects Versions: 3.6.4
> Reporter: Stephen Mallette
> Priority: Major
>
> Allow the grammar to support parameters similar to how the groovy engine does
> like, {{g.inject(x,y,z)}}. Doing this will make it easier for a transition
> away from the groovy engine as a lot of Gremlin in the world today uses
> parameters. The grammar may have to come with some limitations though as
> groovy is wide open in terms of what can be treated as a variable. Probably
> going to keep parameters tied to primitives, collections and tokens/enums
> like {{Order}} and {{Scope}}. Collections themselves will not contain
> parameters and things like a {{Traversal}} or {{P}} cannot be treated as one.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)