From a46125ca0e4569a41d2d078c3168dbfd8950534a Mon Sep 17 00:00:00 2001 From: Janak Ramakrishnan Date: Wed, 11 Feb 2015 16:51:37 +0000 Subject: Extract an EvaluableBlazeQueryEnvironment abstract class from BlazeQueryEnvironment that exposes an evaluateQuery method, and also implements the non-LabelVisitor-specific parts of BlazeQueryEnvironment, for other implementations' uses. Most of the code is just a straight refactoring of BlazeQueryEnvironment into EvaluableBlazeQueryEnvironment (and BlazeTargetAccessor). Ignoring whitespace changes in [] may be your friend for seeing that it's a straight move. This also allows us to change tests to use QueryCommand.newQueryEnvironment, in preparation for newQueryEnvironment potentially returning a different EvaluableBlazeQueryEnvironment subclass depending on the circumstances. -- MOS_MIGRATED_REVID=86088953 --- .../lib/query2/AbstractBlazeQueryEnvironment.java | 217 +++++++++++++++ .../build/lib/query2/BlazeQueryEnvironment.java | 292 +-------------------- .../build/lib/query2/BlazeTargetAccessor.java | 154 +++++++++++ .../build/lib/runtime/commands/QueryCommand.java | 44 +++- 4 files changed, 414 insertions(+), 293 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java create mode 100644 src/main/java/com/google/devtools/build/lib/query2/BlazeTargetAccessor.java (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java new file mode 100644 index 0000000000..48840eac7c --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java @@ -0,0 +1,217 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// Licensed 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 com.google.devtools.build.lib.query2; + +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; +import com.google.devtools.build.lib.cmdline.ResolvedTargets; +import com.google.devtools.build.lib.cmdline.TargetParsingException; +import com.google.devtools.build.lib.events.ErrorSensingEventHandler; +import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.Attribute; +import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator; +import com.google.devtools.build.lib.query2.engine.QueryEnvironment; +import com.google.devtools.build.lib.query2.engine.QueryEvalResult; +import com.google.devtools.build.lib.query2.engine.QueryException; +import com.google.devtools.build.lib.query2.engine.QueryExpression; +import com.google.devtools.build.lib.syntax.Label; +import com.google.devtools.build.lib.util.BinaryPredicate; + +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * {@link QueryEnvironment} that can evaluate queries to produce a result, and implements as much + * of QueryEnvironment as possible while remaining mostly agnostic as to the objects being stored. + */ +public abstract class AbstractBlazeQueryEnvironment implements QueryEnvironment { + protected final ErrorSensingEventHandler eventHandler; + private final TargetPatternEvaluator targetPatternEvaluator; + private final Map> letBindings = new HashMap<>(); + protected final Map> resolvedTargetPatterns = new HashMap<>(); + protected final boolean keepGoing; + protected final boolean strictScope; + + protected final BinaryPredicate dependencyFilter; + private final Predicate