aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-07-13 16:22:30 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-07-14 11:12:15 +0000
commitbc47f40b0dd352d3bf9dc8228fbf0279ac67e907 (patch)
tree93ac0e8ae932517d4b080769b95345fd338767c7 /src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
parent80d1e16b7ae1d04fa2fa4c561588fe9fdbaefc41 (diff)
Re-implement variables in the blaze query language. Instead of using a mutable global context of variable bindings, pass around immutable local contexts.
The motivation is so we can safely evaluate all blaze query expressions concurrently under the hood. A global context is hostile to this goal. -- MOS_MIGRATED_REVID=127324600
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
index 2c6d331b3d..d0de7c0d64 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
@@ -70,21 +70,26 @@ public abstract class QueryExpression {
* thrown. If disabled, evaluation will stumble on to produce a (possibly
* inaccurate) result, but a result nonetheless.
*/
- public abstract <T> void eval(QueryEnvironment<T> env, Callback<T> callback)
- throws QueryException, InterruptedException;
+ public abstract <T> void eval(
+ QueryEnvironment<T> env,
+ VariableContext<T> context,
+ Callback<T> callback) throws QueryException, InterruptedException;
/**
* If {@code canEvalConcurrently()}, evaluates this query in the specified environment, as in
- * {@link #eval(QueryEnvironment, Callback)}, employing {@code executorService}.
+ * {@link #eval(QueryEnvironment, VariableContext, Callback)}, employing {@code executorService}.
*
- * <p>The caller must ensure that both {@code env} and {@code callback} are effectively
- * threadsafe. The query expression may call their methods from multiple threads.
+ * <p>The caller must ensure that both {@code env}, {@code context}, and {@code callback} are
+ * effectively threadsafe. The query expression may call their methods from multiple threads.
*/
public <T> void evalConcurrently(
- QueryEnvironment<T> env, Callback<T> callback, ListeningExecutorService executorService)
+ QueryEnvironment<T> env,
+ VariableContext<T> context,
+ Callback<T> callback,
+ ListeningExecutorService executorService)
throws QueryException, InterruptedException {
Preconditions.checkState(canEvalConcurrently());
- eval(env, callback);
+ eval(env, context, callback);
}
/**