diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/query2/engine/QueryParser.java | 25 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java | 2 |
2 files changed, 15 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryParser.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryParser.java index b202bc326e..9ba285ee29 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryParser.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryParser.java @@ -45,7 +45,7 @@ import java.util.Map; * | SET '(' WORD * ')' * </pre> */ -final class QueryParser { +public final class QueryParser { private Lexer.Token token; // current lookahead token private final List<Lexer.Token> tokens; @@ -56,23 +56,26 @@ final class QueryParser { * Scan and parse the specified query expression. */ static QueryExpression parse(String query, QueryEnvironment<?> env) throws QueryException { - QueryParser parser = new QueryParser(Lexer.scan(query), env); + HashMap<String, QueryFunction> functions = new HashMap<>(); + for (QueryFunction queryFunction : env.getFunctions()) { + functions.put(queryFunction.getName(), queryFunction); + } + return parse(query, functions); + } + + public static QueryExpression parse(String query, HashMap<String, QueryFunction> functions) + throws QueryException { + QueryParser parser = new QueryParser(Lexer.scan(query), functions); QueryExpression expr = parser.parseExpression(); if (parser.token.kind != TokenKind.EOF) { throw new QueryException("unexpected token '" + parser.token - + "' after query expression '" + expr + "'"); + + "' after query expression '" + expr + "'"); } return expr; } - private QueryParser(List<Lexer.Token> tokens, QueryEnvironment<?> env) { - // TODO(bazel-team): We only need QueryEnvironment#getFunctions, consider refactoring users of - // QueryParser#parse to instead just pass in the set of functions to make testing, among other - // things, simpler. - this.functions = new HashMap<>(); - for (QueryFunction queryFunction : env.getFunctions()) { - this.functions.put(queryFunction.getName(), queryFunction); - } + public QueryParser(List<Lexer.Token> tokens, HashMap<String, QueryFunction> functions) { + this.functions = functions; this.tokens = tokens; this.tokenIterator = tokens.iterator(); nextToken(); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java index 93e88ea1df..60fc89ab46 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java @@ -478,7 +478,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase { * * Also see {@link AnalysisTestCase#setRulesAndAspectsAvailableInTests(Iterable, Iterable)}. */ - protected final void setRulesAvailableInTests(RuleDefinition... rules) throws Exception { + protected void setRulesAvailableInTests(RuleDefinition... rules) throws Exception { setRulesAndAspectsAvailableInTests( ImmutableList.<NativeAspectClass>of(), ImmutableList.copyOf(rules)); |