Generalize QueryExpressionVisitor's visitation by permitting an arbitrary "context" object to be passed along. Also make some query internals public, for use in fancy QueryExpressionVisitor implementations.

RELNOTES: None
PiperOrigin-RevId: 184014063
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 03341de..0485f9d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -335,7 +335,7 @@
    * {@literal 'rdeps(<universeScope>, <T>)'} to {@literal 'allrdeps(<T>)'}. The latter is more
    * efficient.
    */
-  protected static class RdepsToAllRdepsQueryExpressionMapper extends QueryExpressionMapper {
+  protected static class RdepsToAllRdepsQueryExpressionMapper extends QueryExpressionMapper<Void> {
     protected final TargetPattern.Parser targetPatternParser;
     private final String absoluteUniverseScopePattern;
 
@@ -347,7 +347,7 @@
     }
 
     @Override
-    public QueryExpression visit(FunctionExpression functionExpression) {
+    public QueryExpression visit(FunctionExpression functionExpression, Void context) {
       if (functionExpression.getFunction().getName().equals(new RdepsFunction().getName())) {
         List<Argument> args = functionExpression.getArgs();
         QueryExpression universeExpression = args.get(0).getExpression();
@@ -361,13 +361,13 @@
           }
         }
       }
-      return super.visit(functionExpression);
+      return super.visit(functionExpression, context);
     }
   }
 
   @Override
   public final QueryExpression transformParsedQuery(QueryExpression queryExpression) {
-    QueryExpressionMapper mapper = getQueryExpressionMapper();
+    QueryExpressionMapper<Void> mapper = getQueryExpressionMapper();
     QueryExpression transformedQueryExpression = queryExpression.accept(mapper);
     logger.info(
         String.format(
@@ -381,7 +381,7 @@
     return transformedQueryExpression;
   }
 
-  protected QueryExpressionMapper getQueryExpressionMapper() {
+  protected QueryExpressionMapper<Void> getQueryExpressionMapper() {
     if (universeScope.size() != 1) {
       return QueryExpressionMapper.identity();
     }