You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by "vkagamlyk (via GitHub)" <gi...@apache.org> on 2023/06/15 20:28:39 UTC

[GitHub] [tinkerpop] vkagamlyk commented on a diff in pull request #2094: TINKERPOP-2959 Allowed parsing of parameters with the grammar

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`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@tinkerpop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org