aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
diff options
context:
space:
mode:
authorGravatar michajlo <michajlo@google.com>2017-08-04 18:49:49 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-08-07 11:22:03 +0200
commit2266a6f88030e7121031db19fb5efc3fc7cb149c (patch)
treeb2e50e652da50730e8676e86f32f68b55b62b567 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
parent652046954c9479a91cb7f07014d805525091a0b1 (diff)
Micro-optimization for TransitiveBaseTraversalFunction
No need to create 2-3 collections when we only need one. PiperOrigin-RevId: 164273126
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java50
1 files changed, 26 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
index 3bc1f30845..c622340c3a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
@@ -13,6 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.devtools.build.lib.cmdline.Label;
@@ -123,7 +125,8 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
TProcessedTargets processedTargets = processTarget(label, targetAndErrorIfAny);
// Process deps from attributes.
- Iterable<SkyKey> labelDepKeys = getLabelDepKeys(targetAndErrorIfAny.getTarget());
+ Collection<SkyKey> labelDepKeys =
+ Collections2.transform(getLabelDeps(targetAndErrorIfAny.getTarget()), this::getKey);
Map<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> depMap =
env.getValuesOrThrow(labelDepKeys, NoSuchPackageException.class,
@@ -195,42 +198,41 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
Environment env)
throws InterruptedException;
- private Iterable<SkyKey> getLabelDepKeys(Target target) throws InterruptedException {
- List<SkyKey> depKeys = Lists.newArrayList();
- for (Label depLabel : getLabelDeps(target)) {
- depKeys.add(getKey(depLabel));
- }
- return depKeys;
- }
-
// TODO(bazel-team): Unify this logic with that in LabelVisitor, and possibly DependencyResolver.
- private static Iterable<Label> getLabelDeps(Target target) throws InterruptedException {
- final Set<Label> labels = new HashSet<>();
+ private static Collection<Label> getLabelDeps(Target target) throws InterruptedException {
if (target instanceof OutputFile) {
Rule rule = ((OutputFile) target).getGeneratingRule();
- labels.add(rule.getLabel());
- visitTargetVisibility(target, labels);
+ List<Label> visibilityLabels = visitTargetVisibility(target);
+ HashSet<Label> result = new HashSet<>(visibilityLabels.size() + 1);
+ result.add(rule.getLabel());
+ result.addAll(visibilityLabels);
+ return result;
} else if (target instanceof InputFile) {
- visitTargetVisibility(target, labels);
+ return new HashSet<>(visitTargetVisibility(target));
} else if (target instanceof Rule) {
- visitTargetVisibility(target, labels);
- visitRule(target, labels);
+ List<Label> visibilityLabels = visitTargetVisibility(target);
+ Collection<Label> ruleLabels = visitRule(target);
+ HashSet<Label> result = new HashSet<>(visibilityLabels.size() + ruleLabels.size());
+ result.addAll(visibilityLabels);
+ result.addAll(ruleLabels);
+ return result;
} else if (target instanceof PackageGroup) {
- visitPackageGroup((PackageGroup) target, labels);
+ return new HashSet<>(visitPackageGroup((PackageGroup) target));
+ } else {
+ return ImmutableSet.of();
}
- return labels;
}
- private static void visitRule(Target target, Set<Label> labels) throws InterruptedException {
- labels.addAll(((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES).values());
+ private static Collection<Label> visitRule(Target target) throws InterruptedException {
+ return ((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES).values();
}
- private static void visitTargetVisibility(Target target, Set<Label> labels) {
- labels.addAll(target.getVisibility().getDependencyLabels());
+ private static List<Label> visitTargetVisibility(Target target) {
+ return target.getVisibility().getDependencyLabels();
}
- private static void visitPackageGroup(PackageGroup packageGroup, Set<Label> labels) {
- labels.addAll(packageGroup.getIncludes());
+ private static List<Label> visitPackageGroup(PackageGroup packageGroup) {
+ return packageGroup.getIncludes();
}
enum LoadTargetResultsType {