diff options
author | 2015-09-08 08:54:25 +0000 | |
---|---|---|
committer | 2015-09-08 09:09:31 +0000 | |
commit | 83f8271fd9fae7c9fde473c28c1b7e3f7504442a (patch) | |
tree | 3321ef2eaee91ffbfa7728a5a88635f1d7cbf54c | |
parent | 2aad9d7e697aa6277bec89b8eaa7d728ceacf56b (diff) |
Extract the test filtering into a new class.
This is intended to make it easier to reimplement this in Skyframe, in order
to merge loading and analysis phases.
--
MOS_MIGRATED_REVID=102536532
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunner.java | 29 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java | 102 |
2 files changed, 103 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunner.java index e227929a4b..77227c646b 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunner.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunner.java @@ -14,8 +14,6 @@ package com.google.devtools.build.lib.pkgcache; import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -603,33 +601,8 @@ public class LoadingPhaseRunner { ResolvedTargets.Builder<Target> finalBuilder = ResolvedTargets.builder(); finalBuilder.merge(testTargetsBuilder); - finalBuilder.filter(getTestFilter(eventHandler, options)); + finalBuilder.filter(TestFilter.forOptions(options, eventHandler, ruleNames)); return finalBuilder.build(); - - } - - /** - * Convert the options into a test filter. - */ - private Predicate<Target> getTestFilter(EventHandler eventHandler, Options options) { - Predicate<Target> testFilter = Predicates.alwaysTrue(); - if (!options.testSizeFilterSet.isEmpty()) { - testFilter = Predicates.and(testFilter, - TestTargetUtils.testSizeFilter(options.testSizeFilterSet)); - } - if (!options.testTimeoutFilterSet.isEmpty()) { - testFilter = Predicates.and(testFilter, - TestTargetUtils.testTimeoutFilter(options.testTimeoutFilterSet)); - } - if (!options.testTagFilterList.isEmpty()) { - testFilter = Predicates.and(testFilter, - TestTargetUtils.tagFilter(options.testTagFilterList)); - } - if (!options.testLangFilterList.isEmpty()) { - testFilter = Predicates.and(testFilter, - TestTargetUtils.testLangFilter(options.testLangFilterList, eventHandler, ruleNames)); - } - return testFilter; } /** diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java new file mode 100644 index 0000000000..6728cdd1f4 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java @@ -0,0 +1,102 @@ +// 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.pkgcache; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.packages.TestSize; +import com.google.devtools.build.lib.packages.TestTargetUtils; +import com.google.devtools.build.lib.packages.TestTimeout; +import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner.Options; + +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import javax.annotation.Nullable; + +/** + * Predicate that implements test filtering using the command-line options in {@link Options}. + * Implements {@link #hashCode} and {@link #equals} so it can be used as a Skyframe key. + */ +public final class TestFilter implements Predicate<Target> { + /** + * Convert the options into a test filter. + */ + public static TestFilter forOptions(Options options, EventHandler eventHandler, + Set<String> ruleNames) { + Predicate<Target> testFilter = Predicates.alwaysTrue(); + if (!options.testSizeFilterSet.isEmpty()) { + testFilter = Predicates.and(testFilter, + TestTargetUtils.testSizeFilter(options.testSizeFilterSet)); + } + if (!options.testTimeoutFilterSet.isEmpty()) { + testFilter = Predicates.and(testFilter, + TestTargetUtils.testTimeoutFilter(options.testTimeoutFilterSet)); + } + if (!options.testTagFilterList.isEmpty()) { + testFilter = Predicates.and(testFilter, + TestTargetUtils.tagFilter(options.testTagFilterList)); + } + if (!options.testLangFilterList.isEmpty()) { + testFilter = Predicates.and(testFilter, + TestTargetUtils.testLangFilter(options.testLangFilterList, eventHandler, ruleNames)); + } + return new TestFilter(options.testSizeFilterSet, options.testTimeoutFilterSet, + options.testTagFilterList, options.testLangFilterList, testFilter); + } + + private final Set<TestSize> testSizeFilterSet; + private final Set<TestTimeout> testTimeoutFilterSet; + private final List<String> testTagFilterList; + private final List<String> testLangFilterList; + private final Predicate<Target> impl; + + private TestFilter(Set<TestSize> testSizeFilterSet, Set<TestTimeout> testTimeoutFilterSet, + List<String> testTagFilterList, List<String> testLangFilterList, Predicate<Target> impl) { + this.testSizeFilterSet = testSizeFilterSet; + this.testTimeoutFilterSet = testTimeoutFilterSet; + this.testTagFilterList = testTagFilterList; + this.testLangFilterList = testLangFilterList; + this.impl = impl; + } + + @Override + public boolean apply(@Nullable Target input) { + return impl.apply(input); + } + + @Override + public int hashCode() { + return Objects.hash(testSizeFilterSet, testTimeoutFilterSet, testTagFilterList, + testLangFilterList); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof TestFilter)) { + return false; + } + TestFilter f = (TestFilter) o; + return f.testSizeFilterSet.equals(testSizeFilterSet) + && f.testTimeoutFilterSet.equals(testTimeoutFilterSet) + && f.testTagFilterList.equals(testTagFilterList) + && f.testLangFilterList.equals(testLangFilterList); + } +} |