diff options
author | 2015-06-26 16:03:14 +0000 | |
---|---|---|
committer | 2015-06-29 16:37:42 +0000 | |
commit | be3171e9624ce8ab23a3a9d799d86196f6194f81 (patch) | |
tree | 7a257bcb0384b121ce6ec24328cf712902d35731 /src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java | |
parent | 8a84dd98b8fcdf71494e058e8bc36ed8ae1b6ec8 (diff) |
Refactoring of SkyframeTargetPatternEvaluator. Now instead of making separate calls to skyframeExecutor for each target patterns, all of them are computed in one call.
--
MOS_MIGRATED_REVID=96973513
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java new file mode 100644 index 0000000000..4aa2bf21ac --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestTargetPatternsResultBuilder.java @@ -0,0 +1,104 @@ +// 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.skyframe; + +import com.google.common.base.Predicates; +import com.google.devtools.build.lib.cmdline.ResolvedTargets; +import com.google.devtools.build.lib.cmdline.TargetParsingException; +import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.packages.TestTargetUtils; +import com.google.devtools.build.lib.pkgcache.TargetProvider; +import com.google.devtools.build.lib.syntax.Label; + +import java.util.ArrayList; + +/** + * Evaluates set of test targets based on list of target patterns. In contradistinction to + * {@code BuildTargetPatternEvaluatorUtil} this class will expand all test suites. + */ +class TestTargetPatternsResultBuilder extends TargetPatternsResultBuilder { + private final ArrayList<ResolvedTargetsOfPattern> labelsOfPatterns = new ArrayList<>(); + private final TargetProvider targetProvider; + private final EventHandler eventHandler; + private final boolean keepGoing; + + private static class ResolvedTargetsOfPattern { + private final ResolvedTargets<Label> labels; + private final boolean negativePattern; + + public ResolvedTargetsOfPattern(ResolvedTargets<Label> labels, boolean negativePattern) { + this.labels = labels; + this.negativePattern = negativePattern; + } + + public ResolvedTargets<Label> getLabels() { + return labels; + } + + public boolean isNegativePattern() { + return negativePattern; + } + } + + TestTargetPatternsResultBuilder(TargetProvider targetProvider, + EventHandler eventHandler, boolean keepGoing) { + this.targetProvider = targetProvider; + this.eventHandler = eventHandler; + this.keepGoing = keepGoing; + } + + @Override + void addLabelsOfNegativePattern(ResolvedTargets<Label> labels) { + labelsOfPatterns.add(new ResolvedTargetsOfPattern(labels, true)); + } + + @Override + void addLabelsOfPositivePattern(ResolvedTargets<Label> labels) { + labelsOfPatterns.add(new ResolvedTargetsOfPattern(labels, false)); + } + + @Override + protected Iterable<Label> getLabels() { + ArrayList<Label> labels = new ArrayList<>(); + for (ResolvedTargetsOfPattern resolvedLabels : labelsOfPatterns) { + labels.addAll(resolvedLabels.getLabels().getTargets()); + labels.addAll(resolvedLabels.getLabels().getFilteredTargets()); + } + return labels; + } + + @Override + ResolvedTargets.Builder<Target> buildInternal() throws TargetParsingException { + ResolvedTargets.Builder<Target> finalResult = ResolvedTargets.builder(); + for (ResolvedTargetsOfPattern labels : labelsOfPatterns) { + ResolvedTargets.Builder<Target> resolvedTargetsBuilder = + transformLabelsIntoTargets(labels.getLabels()); + ResolvedTargets<Target> expanded = TestTargetUtils.expandTestSuites(targetProvider, + eventHandler, + resolvedTargetsBuilder.build().getTargets(), + /*strict=*/false, + keepGoing); + if (expanded.hasError()) { + setError(); + } + if (labels.isNegativePattern()) { + finalResult.filter(Predicates.not(Predicates.in(expanded.getTargets()))); + } else { + finalResult.addAll(expanded.getTargets()); + } + } + return finalResult; + } +} |