private Void handleInject(final ParserRuleContext ctx) {
        if (ctx.getChildCount() > 3 && ctx.getChild(2) instanceof GremlinParser.GenericArgumentVarargsContext) {
            final GremlinParser.GenericArgumentVarargsContext varArgs = (GremlinParser.GenericArgumentVarargsContext) ctx.getChild(2);
            if (varArgs.getChildCount() > 2 && "null".equals(varArgs.getChild(2).getText())) {
                sb.append(ctx.getChild(0).getText());
                sb.append("(");
                for (int i = 0; i < varArgs.getChildCount(); i += 2) {
                    if (i == 2) {
                        sb.append("(Object) null");
                    } else {
                        visit(varArgs.getChild(i));
                    }

                    if (i < varArgs.getChildCount() - 1) {
                        sb.append(", ");
                    }
                }

                sb.append(")");
                return null;
            }
        }

        return visitChildren(ctx);
    }
Special handling for inject with second `null` argument like g.inject(1, null)
inject() ends up being ambiguous with groovy's jdk extension of inject(Object initialValue, Closure closure)
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java